1. 程式人生 > >1077 互評成績計算 (20 分)

1077 互評成績計算 (20 分)

1077 互評成績計算 (20 分)

在浙大的計算機專業課中,經常有互評分組報告這個環節。一個組上臺介紹自己的工作,其他組在臺下為其表現評分。最後這個組的互評成績是這樣計算的:所有其他組的評分中,去掉一個最高分和一個最低分,剩下的分數取平均分記為 G​1​​;老師給這個組的評分記為 G​2​​。該組得分為 (G​1​​+G​2​​)/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

思路: 因為老師的評分是一定合法的,所以我們可以把老師的成績單獨拿出來。在輸入老師評分之後我們開始輸入,學生的評分,這時候的評分不一定合法所以用了個臨時的 t 來表示,之後進行合法判斷,若合法則將其放入陣列,排序後去頭去尾,在計算就行了。

#include <iostream>
#include <algorithm>
#include<cmath>
using namespace std; 
int main(int argc, char** argv) 
{
	int n,m,g1,t,y;//x是用來對a的下標 
	float count;
	cin>>n>>m;
	int a[n];
	for(int i=0;i<n;i++)
	{
		int x=0;//x是用來對a的下標 
		cin>>g1;//輸入老師的評分 
		for(int j=0;j<n-1;j++)
		{
			cin>>t;//輸入同學的評分,並且判斷是否合法 
			if(t>=0&&t<=m)
			{
				a[x++]=t; 
			}	
		}
		sort(a,a+x);//對同學的評分進行排序 
		int g2=0;
		 for(int y=1;y<x-1;y++)
		 {
		 	g2+=a[y]; 
		 	t=y;
		 }
		 g2=g2/t;
		 count=(g1+g2)*1.0/2+0.5;
		 cout<<floor(count)<<endl;
	}
	return 0;
}