PAT1077互評成績計算(java實現)

TNTZS666發表於2019-01-23

題目描述:

在浙大的計算機專業課中,經常有互評分組報告這個環節。一個組上臺介紹自己的工作,其他組在臺下為其表現評分。最後這個組的互評成績是這樣計算的:所有其他組的評分中,去掉一個最高分和一個最低分,剩下的分數取平均分記為 G​1;老師給這個組的評分記為 G​2。該組得分為 (G1+G2)/2,最後結果四捨五入後保留整數分。本題就要求你寫個程式幫助老師計算每個組的互評成績。

  • 輸入格式
    輸入第一行給出兩個正整數 N(> 3)和 M,分別是分組數和滿分,均不超過 100。隨後 N 行,每行給出該組得到的 N 個分數(均保證為整型範圍內的整數),其中第 1 個是老師給出的評分,後面 N−1 個是其他組給的評分。合法的輸入應該是 [0,M] 區間內的整數,若不在合法區間內,則該分數須被忽略。題目保證老師的評分都是合法的,並且每個組至少會有 3 個來自同學的合法評分。

  • 輸出格式
    為每個組輸出其最終得分。每個得分佔一行。


解題思路:這道題貌似沒有什麼難的地方,就是常規的思路就能做出來,for迴圈遍歷後將符合條件的值加到sum中,之後sum減去最大最小值就是每組有效的分數。求出平均值後和老師的評分一起算出結果

易錯點:最後結果需要四捨五入,用java Math中的取整函式ceil即可完成,返回的是浮點型所以需要強制型別轉換一下。


程式:


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String[] s1 = bf.readLine().split(" ");
		int N = Integer.parseInt(s1[0]);
		int M = Integer.parseInt(s1[1]);
		for (int i = 0; i < N; i++) {
			String[] s2 = bf.readLine().split(" ");
			int G2 = Integer.parseInt(s2[0]);
			int max=0,min=1000,sum=0,count=0;
			double G1 = 0.0;
			for (int j = 1; j < s2.length;j++) {
			while(j!=s2.length&&Integer.parseInt(s2[j])>=0&&Integer.parseInt(s2[j])<=M){
				if (Integer.parseInt(s2[j])>max) {
					max = Integer.parseInt(s2[j]);
				}
				if (Integer.parseInt(s2[j])<min) {
					min = Integer.parseInt(s2[j]);
				}
				//System.out.print(G2+"*");
				//System.out.print(max+" "+min);
				count++;
				sum += Integer.parseInt(s2[j]);
				break;
				}	
			}
			//System.out.print(sum+"&"+count);
			G1 = (sum-max-min)/(count-2);
			//System.out.println("@"+G1);
			int result = (int) Math.ceil((G1+G2)/2);
			System.out.println(result);
		}
	}
}

相關文章