L2-015 互評成績 (25 分)
阿新 • • 發佈:2018-12-19
L2-015 互評成績 (25 分)
學生互評作業的簡單規則是這樣定的:每個人的作業會被k
個同學評審,得到k
個成績。系統需要去掉一個最高分和一個最低分,將剩下的分數取平均,就得到這個學生的最後成績。本題就要求你編寫這個互評系統的算分模組。
輸入格式:
輸入第一行給出3個正整數N
(3 < N
≤104,學生總數)、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
#include<bits/stdc++.h> using namespace std; int main(){ stack<double> p; int n,m,k; multiset<double> oo;//成績可能是重複的,所以用multiset容器來儲存成績 int d; cin>>n>>m>>k; double s; for(int kk=0;kk!=n;++kk){ s=0; multiset<int> op;//同oo一樣用來儲存成績 for(int j=0;j!=m;++j){ scanf("%d",&d); op.insert(d); } for(auto i=++op.begin();i!=--op.end();++i){//去處最高分與最低分 s+=*i; } s=s/(m-2);//求平均值 oo.insert(s);//將平均值存到oo中; } int cnt=0; for(auto i=oo.rbegin();cnt<k;++i,++cnt){ p.push(*i); } printf("%.3lf",p.top()); p.pop(); while(!p.empty()){ printf(" %.3lf",p.top()); p.pop(); } return 0; }