【CCCC】L2-015 互评成绩 (25分),,简单模拟,水题,动态数组排序

    科技2022-07-12  249

    problem

    L2-015 互评成绩 (25分) 学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。

    输入格式: 输入第一行给出3个正整数N(3 < N ≤10 ​4 ​​ ,学生总数)、k(3 ≤ k ≤ 10,每份作业的评审数)、M(≤ 20,需要输出的学生数)。随后N行,每行给出一份作业得到的k个评审成绩(在区间[0, 100]内),其间以空格分隔。

    输出格式: 按非递减顺序输出最后得分最高的M个成绩,保留小数点后3位。分数间有1个空格,行首尾不得有多余空格。

    输入样例: 6 5 3 88 90 85 99 60 67 60 80 76 70 90 93 96 99 99 78 65 77 70 72 88 88 88 88 88 55 55 55 55 55 输出样例: 87.667 88.000 96.000

    给出n个学生成绩,每个人有k份,去掉最大和最小取平均。输出排名前m的成绩。

    solution

    扫一遍记录最大最小和总数,获得成绩后加入动态数组,先排序取m最大,再排序m个递增。 #include<bits/stdc++.h> using namespace std; bool cmp(double a, double b){return a>b;} int main(){ int n, k, m; cin>>n>>k>>m; vector<double>ans; for(int i = 1; i <= n; i++){ int _max=-1, _min=101, _sum=0; for(int j = 1; j <= k; j++){ int x; cin>>x; _sum += x; _min = min(_min, x); _max = max(_max, x); } _sum -= _min+_max; ans.push_back(_sum*1.0/(k-2)); } sort(ans.begin(),ans.end(),cmp); sort(ans.begin(),ans.begin()+m); for(int i = 0; i < m-1; i++) printf("%.3f ", ans[i]); printf("%.3f",ans[m-1]); return 0; }
    Processed: 0.010, SQL: 8