PAT (Basic Level) 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

解題思路:
通過二維數組遍歷每一組的得分,除去老師打得分外,在剩餘“合法”分數裏尋找最大值,最小值,同時要求出所有分數的和,最後按要求求平均值輸出。
:尋找max,min時,應該先設定一個max,min初值,如代碼第21行,爲找初值。

代碼:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n, Maxscore;
	cin >> n >> Maxscore;
	int test[100][100];
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> test[i][j];
		}
	}
	for (int i = 0; i < n; i++)
	{
		int sum = 0, max, min, count = 0, flag = 0;
		for (int j = 1; j < n; j++)
		{
			for (int k = j; k < n && flag == 0; k++)   //設定初值
			{
				if (test[i][j] >= 0 && test[i][j] <= Maxscore)
				{
					min = max = test[i][j];
					flag = 1;
					break;
				}
			}
			if (test[i][j] >= 0 && test[i][j] <= Maxscore)
			{
				count++;
				if (test[i][j] > max)
					max = test[i][j];
				if(test[i][j] < min)
					min= test[i][j];
				sum += test[i][j];
			}
		}
		cout << round((test[i][0] + (sum - max - min)/(count-2)) / 2.0) << endl;
	}
	return 0;
}

ps:博主能力有限,如果讀者發現什麼問題,歡迎私信或評論指出不足。歡迎讀者詢問問題,樂意盡我所能解答讀者的問題。歡迎評論,歡迎交流。謝謝大家!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章