C++笔试题 评分

版权声明:代码属于原创,转载请联系作者并注明出处。 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43379056/article/details/84556288