Модуль 1.12 (Стандартные алгоритмы STL) в данном модуле будут изучены разные алгоритмы, которые есть в стандартной библиотеке C++.
Ниже представлены примеры задач с решением на C++ на тему Стандартные алгоритмы STL.
Отсортируйте массив.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector <int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a.begin(), a.end());
for (auto now : a) {
cout << now << " ";
}
return 0;
}
В обувном магазине продается обувь разного размера. Известно, что одну пару обуви можно надеть на другую, если она хотя бы на три размера больше. В магазин пришел покупатель. Требуется определить, какое наибольшее количество пар обуви сможет предложить ему продавец так, чтобы он смог надеть их все одновременно.
#include <iostream>
#include <set>
using namespace std;
int main()
{
int n, size;
cin>>size;
cin>>n;
set <int> s ;
for (int i=0; i<n; i++){
int x;
cin>>x;
s.insert(x);
}
int i=0;
int cnt=0;
for (auto now=s.begin(); now!=s.end(); now++){
if (*(now)-size>=0&&cnt==0){
cnt++;
size=*(now);
i++;
}
else if(*(now)-size>=3||*(now)==size){
cnt++;
size=*(now);
i++;
}
else
i++;
}
cout<<cnt<<endl;
return 0;
}
Во время проведения олимпиады каждый из участников получил свой идентификационный номер – натуральное число. Необходимо отсортировать список участников олимпиады по количеству набранных ими баллов.
#include <iostream>
#include <algorithm>
#include <set>
#include <utility>
#include <vector>
using namespace std;
struct olympiad {
int member_number; // Номер участника олимпиады
int num_of_points; // Количество баллов
};
bool sort_func (olympiad a, olympiad b)
{
if (a.num_of_points != b.num_of_points) {
return a.num_of_points > b.num_of_points;
} else {
return a.member_number < b.member_number;
}
}
int main()
{
int n;
cin >> n;
vector <olympiad> vect(n);
for (int i = 0; i < n; i++) {
int temp_member_number, temp_num_of_points;
cin >> temp_member_number >> temp_num_of_points;
olympiad struct_temp;
struct_temp.member_number = temp_member_number;
struct_temp.num_of_points = temp_num_of_points;
vect[i] = struct_temp;
}
cout << endl;
sort(vect.begin(), vect.end(), sort_func);
for (auto now : vect) {
cout << now.member_number << ' ' << now.num_of_points << endl;
}
system("pause");
return 0;
}
Выведите все исходные точки в порядке возрастания их расстояний от начала координат.
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
struct point {
int x, y;
float l;
};
bool cmp(point a, point b) {
return a.l < b.l;
}
int main()
{
int N, x, y;
cin >> N;
vector <point> a(N);
for (int i = 0; i < N; i++)
{
cin >> x >> y;
a[i].x = x;
a[i].y = y;
a[i].l = sqrt(float(x*x + y*y));
}
sort(a.begin(), a.end(), cmp);
for (int i = 0; i < N; i++)
{
cout << a[i].x << " " << a[i].y << endl;
}
return 0;
}
Выведите фамилии и имена учащихся в порядке убывания их среднего балла.
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
struct student {
string name;
int subj_1, subj_2, subj_3;
int subj_mean;
};
bool cmp(student a, student b) {
return a.subj_mean > b.subj_mean;
}
int main()
{
int N, subj_1, subj_2, subj_3;
string first_name, last_name;
cin >> N;
vector <student> a(N);
for (int i = 0; i < N; i++)
{
cin >> first_name >> last_name >> subj_1 >> subj_2 >> subj_3;
a[i].name = first_name + ' ' + last_name;
a[i].subj_1 = subj_1;
a[i].subj_2 = subj_2;
a[i].subj_3 = subj_3;
a[i].subj_mean = subj_1 + subj_2 + subj_3;
}
stable_sort(a.begin(), a.end(), cmp);
for (int i = 0; i < N; i++)
{
cout << a[i].name << endl;
}
return 0;
}
Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы