PAT-B 1077 互評成績計算【模擬】

Enjoy_process發表於2019-02-26

                                            PAT-B 1077 互評成績計算

                   https://pintia.cn/problem-sets/994805260223102976/problems/994805262303477760

 

 

題目

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

分析

模擬題,註釋很詳細,具體看程式。

C++程式

#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		int ans=0,sum=0,tmp,num=0,Max=0,Min=m;
		scanf("%d",&ans);//老師評分
		for(int j=2;j<=n;j++)
		{
			scanf("%d",&tmp);
			if(0<=tmp&&tmp<=m)//合法 
			{
				sum+=tmp;
				num++;//評分人數加一
				Max=max(Max,tmp);//最高分 
				Min=min(Min,tmp);//最低分 
			}
		}
		sum=sum-Max-Min;//減去一個最高分和一個最低分
		num-=2;//評分人數減2
		double ave=(double)sum/(double)num;//求同學評分的平均分
		double ave2=(ave+ans)/2.0;
		ans=(int)ave2;
		if(ave2-ans>=0.5) ans++;//四捨五入
		printf("%d\n",ans); 
	}
	return 0;
}

 

相關文章