1077 互評成績計算 ——C++實現
阿新 • • 發佈:2018-11-19
題目
1077 互評成績計算 (20 分)
在浙大的計算機專業課中,經常有互評分組報告這個環節。一個組上臺介紹自己的工作,其他組在臺下為其表現評分。最後這個組的互評成績是這樣計算的:所有其他組的評分中,去掉一個最高分和一個最低分,剩下的分數取平均分記為 G1;老師給這個組的評分記為 G2。該組得分為 (G1+G2)/2,最後結果四捨五入後保留整數分。本題就要求你寫個程式幫助老師計算每個組的互評成績。
輸入格式:
輸入第一行給出兩個正整數 N(> 3)和 M,分別是分組數和滿分,均不超過 100。隨後 N 行,每行給出該組得到的 N 個分數(均保證為整型範圍內的整數),其中第 1 個是老師給出的評分,後面 N−1 個是其他組給的評分。合法的輸入應該是 [0,M] 區間內的整數,若不在合法區間內,則該分數須被忽略。題目保證老師的評分都是合法的,並且每個組至少會有 3 個來自同學的合法評分。
輸出格式:
為每個組輸出其最終得分。每個得分佔一行。
輸入樣例:
6 50 42 49 49 35 38 41 36 51 50 28 -1 30 40 36 41 33 47 49 30 250 -25 27 45 31 48 0 0 50 50 1234 43 41 36 29 42 29
輸出樣例:
42 33 41 31 37 39
演算法
演算法思想比較簡單,只需要將合理的分數全部相加,然後減去最大和最小的即可,注意sum和老師打分,由於最後要四捨五入,用double比較簡單,判斷四捨五入使用強制轉換成INT型別,和0.5判斷即可。
程式碼
//1077 互評成績計算 v1 #include <iostream> using namespace std; int main(){ int N,M,i,j,tmp,cnt=0,max=0,min=50; cin>>N>>M; double teach,sum=0; for(i=0;i<N;i++){ cin>>teach; for(j=0;j<N-1;j++){ cin>>tmp; if(tmp>=0&&tmp<=M){ //合理的分數 cnt++; //合理分數的個數 sum+=tmp; if(max<tmp) max=tmp; if(min>tmp) min=tmp; } } sum=sum-max-min; sum/=(cnt-2); //四捨五入條件判斷 printf("%d\n",(teach+sum)/2-(int)(teach+sum)/2>=0.5?(int)(teach+sum)/2+1:(int)(teach+sum)/2); sum=0; cnt=0; max=0; min=50; } }