PAT_B_1077_互評成績計算

題目描述:數組

在浙大的計算機專業課中,常常有互評分組報告這個環節。一個組上臺介紹本身的工做,其餘組在臺下爲其表現評分。最後這個組的互評成績是這樣計算的:全部其餘組的評分中,去掉一個最高分和一個最低分,剩下的分數取平均分記爲 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

核心思路:spa

// 把成績記錄在Score[] 數組中,Score[0] 表明老師的打分
// 統計學生的有效成績個數和最高最低分
// 最後運算的時候減去兩個最值,有效成績個數也要減去2
printf("%d\n",(int)(((((sum-min_s-max_s)*1.0/num)+Score[0])*1.0/2)+0.5)); 

本人AC代碼:blog

// 1077 互評成績計算
# include <stdio.h>
# define Max 101

int main(void)
{
	int N, len, num=0, i;
	int flag = -1; // flag標記爲第一個有效的學生成績 
	int M, sum=0, min_s, max_s;
	int Score[Max] = {0};
	scanf("%d %d",&N,&M);
	len = N;
	while (len > 0)
	{
		sum = 0.0;
		num = 0;
		flag = -1; // 每次都設初值爲-1 
		// 每組進行單獨遍歷,找出有效成績個數,找到最大最小值 
		for (i=0; i<N; i++)
		{
			// Score[0]爲老師評分,不參與G1計算 
			scanf("%d",&Score[i]); 
			// 找到第一個有效的學生成績 
			if (i>0 && flag==-1)
			{
				if (Score[i]>=0 && Score[i]<=M)
					flag = 0;
			}
			// 把找到的學生成績記錄爲當前的最大最小值 
			if (0 == flag)
			{
				// 記錄第一個有效的學生成績 
				min_s = max_s = Score[i];
				flag = 1;
			}
			// 統計有效分數
			if (i>0 && Score[i]>=0 && Score[i]<=M)
			{
				sum += Score[i];
				// 有效分數的個數 
				num++;
				// 更新最大最小值 
				if (Score[i] > max_s)
					max_s = Score[i];
				if (Score[i] < min_s)
					min_s = Score[i];
			} 			 
		 } 
		 num -= 2;
		 // 總成績計算
		 // 學生成績爲去掉最大最小值的平均值
		 // 總成績爲學生最終成績和老師最終成績均值
		 printf("%d\n",(int)(((((sum-min_s-max_s)*1.0/num)+Score[0])*1.0/2)+0.5)); 
		
		len--; // 計算下一組 
	}
	
	return 0;
}

RRRio

相關文章
相關標籤/搜索