1. 程式人生 > >PAT乙級——1077(模擬打分 四捨五入)java實現

PAT乙級——1077(模擬打分 四捨五入)java實現

題目:互評成績計算 (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

題目分析及實現

題目不難,有幾個小細節要注意:

  • 要去掉最高分和最低分
  • 互評存在不合格的分數,要去掉
  • 做平均的時候分母需要是不合格的人數,很容易當做直接陣列長度 -2 處理
  • 排序的時候應該注意起止點,要不然有的空位會代入零排序,導致正常分數排在後面。
  • 統計分數要最後在最後取整數,這裡不是直接取整,而是四捨五入,不能直接強轉成int型,要注意
//AC
import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int N = in.nextInt();// 組數
		int M = in.nextInt();// 最高分數
		String[] line = new String[N + 1
]; for (int i = 0; i <= N; i++) { line[i] = in.nextLine(); } in.close(); for (int i = 1; i <= N; i++) { String[] input = line[i].split(" "); double G2 = 0; int index = 0; double G[] = new double[N - 1]; int G1 = Integer.parseInt(input[0]);// 老師的分數 for (int j = 1; j < N; j++) { G2 = Integer.parseInt(input[j]); if (G2 >= 0 && G2 <= M) { // 統計分數 G[index] = G2; index++; } } G2 = 0;// 置為零做累加 Arrays.sort(G, 0, index);// 排序的起始點為0和index,否則可能會有0在前面佔位 int num = 0;// 統計達標的人數,去掉最大最小以及不合格的 for (int j = 1; j < index - 1; j++) { G2 += G[j]; num++; } G2 /= num; // 採用Math.round(double a)來執行四捨五入 System.out.println(Math.round((G1 + G2) / 2)); } } }