版权声明:代码属于原创,转载请联系作者并注明出处。 https://blog.csdn.net/weixin_43379056/article/details/84556288
描述
最近有个选美大赛一改往常的评分规则。评分的规则是这样的:每个选手都由m个人分别打分,共m个成绩。去掉一个最高分和一个最低分,将剩下的m - 2个分数取平均,就得到这个选手的最后成绩。请你用程序表达这个评分模块。
输入描述
输入第一行给出3个正整数N(N < 10^4), M(M < 100), K(要输出的选手数)。随后N行,每行给出一个选手得到的M个评分(在区间[0, 100]内),其间以空格分隔。
输出描述
按非递减顺序输出最后得分最高的K个选手的成绩,保留小数点后3位。分数间有1个空格,行首尾不得有多余空格。
样例输入 1
10 5 3
83 86 77 15 93
35 86 92 49 21
62 27 90 59 63
26 40 26 72 36
11 68 67 29 82
30 62 23 67 35
29 2 22 58 69
67 93 56 11 42
29 73 21 19 84
37 98 24 15 70
样例输出 1
56.667 61.333 82.000
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
int main()
{
int N, M, K;
cin >> N >> M >> K;
vector<int> player_scores(M);
vector<float> players_final_score;
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= M; j++)
{
cin >> player_scores[j-1];
}
sort(player_scores.begin(), player_scores.end());
float sum = 0;
// skip player's highest score and lowest score
for (int j=1; j < M-1; j++)
{
sum += player_scores[j];
}
// calculate average score to get player's final score
float average = sum/(M-2);
players_final_score.push_back(average);
}
sort(players_final_score.begin(), players_final_score.end());
cout << setiosflags(ios::fixed);
cout << setprecision(3) << players_final_score[N-K];
for (int i=N-K+1, j=1; i<N && j<K; i++,j++)
{
cout << " " << players_final_score[i];
}
cout << endl;
return 0;
}