學生互評作業的簡單規則是這樣定的:每個人的作業會被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<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
int n, k, m;
scanf("%d%d%d", &n, &k, &m);
int i, j;
vector<float> scores;
scores.reserve(k);
for (i = 0; i<n; i++)
{
vector<int> st;
st.reserve(k);
float sum = 0;
for (j = 0; j<k; j++) {
int x;
scanf("%d", &x);
sum += x;
st.push_back(x);
}
sort(st.begin(), st.end());
sum -= st[0] + st[k - 1];
sum /= k - 2;
scores.push_back(sum);
}
sort(scores.begin(), scores.end());
i = n - m;
printf("%.3f", scores[i++]);
for (; i < n; i++) printf(" %.3f", scores[i]);
return 0;
}