北京企業(yè)建站服務(wù)中企關(guān)鍵詞首頁(yè)排名代發(fā)
學(xué)生互評(píng)作業(yè)的簡(jiǎn)單規(guī)則是這樣定的:每個(gè)人的作業(yè)會(huì)被k
個(gè)同學(xué)評(píng)審,得到k
個(gè)成績(jī)。系統(tǒng)需要去掉一個(gè)最高分和一個(gè)最低分,將剩下的分?jǐn)?shù)取平均,就得到這個(gè)學(xué)生的最后成績(jī)。本題就要求你編寫這個(gè)互評(píng)系統(tǒng)的算分模塊。
輸入格式:
輸入第一行給出3個(gè)正整數(shù)N
(3?<?N
?≤104,學(xué)生總數(shù))、k
(3?≤?k
?≤?10,每份作業(yè)的評(píng)審數(shù))、M
(≤?20,需要輸出的學(xué)生數(shù))。隨后N
行,每行給出一份作業(yè)得到的k
個(gè)評(píng)審成績(jī)(在區(qū)間[0, 100]內(nèi)),其間以空格分隔。
輸出格式:
按非遞減順序輸出最后得分最高的M
個(gè)成績(jī),保留小數(shù)點(diǎn)后3位。分?jǐn)?shù)間有1個(gè)空格,行首尾不得有多余空格。
輸入樣例:
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
代碼長(zhǎng)度限制
16 KB
時(shí)間限制
300 ms
內(nèi)存限制
64 MB
#include<iostream>
#include<queue>
#include<algorithm>
#include<iomanip>using namespace std;
inline int min(int a, int b){return a<b?a:b;}
struct Record{double average;int score[10];
};//重寫優(yōu)先隊(duì)列的小于號(hào)
bool operator<(const Record& p1, const Record& p2){if(p1.average-p2.average<=1e-6) //當(dāng)兩個(gè)浮點(diǎn)數(shù)相差小于1e-6則認(rèn)為兩個(gè)浮點(diǎn)數(shù)相等return true;elsereturn false;
}//創(chuàng)建優(yōu)先隊(duì)列
priority_queue<Record> st;
//創(chuàng)建數(shù)組
vector<double> ls;
int N, k, M; //N為學(xué)生總數(shù),k為每份作業(yè)的評(píng)審數(shù),M為需要輸出的學(xué)生數(shù)
int main(int argc, char* argv[]){cin >> N >> k >> M;Record tmp;for(int i = 0; i < N; i++){tmp.average = 0.0; //重置平均分for(int j = 0; j < k; j++){cin >> tmp.score[j]; //輸入成績(jī)}sort(tmp.score,tmp.score+k);//對(duì)Record的score進(jìn)行排序for(int s = 1; s < k-1; s++){ //去掉最高分和最低分tmp.average+=tmp.score[s];}tmp.average /= (k-2); //算平均值st.push(tmp); //將當(dāng)前Record放入優(yōu)先隊(duì)列}//得到得分最高的三個(gè)學(xué)生for(int j = 0; j < M; j++){tmp = st.top();st.pop();ls.push_back(tmp.average);}cout << fixed << setprecision(3) << ls[M-1];for(int x = M-2; x >= 0; x--){cout << " " << fixed << setprecision(3) << ls[x];}return 0;
}
?