文章目录
1. 题目来源
链接:前K名的平均数
2. 题目说明
3. 题目解析
方法一:sort()+自定义排序+常规解法
自定义从大到小排序练习。
参见代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
int main() {
int n, m, num[35];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num[i];
}
cin >> m;
sort(num, num + n, cmp);
int sum = 0;
for (int i = 0; i < m; i++) {
sum += num[i];
}
printf("%.2f\n", 1.0 * sum / m);
return 0;
}
方法二:greater< T >()+sort()+常规解法
简单的排降序直接使用 greater<T>()
,作为 sort()
第三个参数即可。
参见代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main() {
int n, m, num[35];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num[i];
}
cin >> m;
sort(num, num + n, greater<int>());
int sum = 0;
for (int i = 0; i < m; i++) {
sum += num[i];
}
printf("%.2f\n", 1.0 * sum / m);
return 0;
}
方法三:lambda表达式+sort()+常规解法
采用 lambda
表达式也能快速完成该工作,同理方法一。
参见代码如下:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main() {
int n, m, num[35];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num[i];
}
cin >> m;
sort(num, num + n, [](int a , int b) {return a > b;});
int sum = 0;
for (int i = 0; i < m; i++) {
sum += num[i];
}
printf("%.2f\n", 1.0 * sum / m);
return 0;
}