Calculate Subject Averages


Submit solution

Points: 10 (partial)
Time limit: 1.0s
Memory limit: 64M

Author:
Problem type
Allowed languages
Java 19, Java 8

題目說明

請撰寫一個程式,處理學生的成績資料。 輸入會給定一個成績表格,代表 m 位學生在 n 個科目的成績。 請計算並輸出每一個科目的平均成績。 關於平均成績的計算方式:將該科目所有學生的成績加總後,除以學生總數 m,結果必須使用 Math.round 進行四捨五入取整數。

提示一:

// 建立一個二維陣列來儲存所有分數
// scores[學生索引][科目索引]

// 計算每一個科目的平均分數
// 外層迴圈跑科目 (j),因為我們要算的是每一列 (Col) 的平均
    // 內層迴圈跑學生 (i),把該科目的所有學生成績加總
    // 計算平均,注意要避免整數除法造成誤差
    // 使用 Math.round 進行四捨五入,結果是 long 型態
    // 輸出結果,後面加上空白

提示二,另一種解法:

// 建立一個長度為 n 的陣列,用來儲存各科總分
// 用一個雙重迴圈,從外部讀取 m 個學生的 n 個科目的每筆成績
    // 將該科目的成績加總到陣列對應位置

// 用一個迴圈,盤點各科總分陣列,計算並輸出每一科的平均值

輸入值的格式

輸入的第一行包含兩個正整數 m 和 n,以空白分隔。 m 代表學生人數,n 代表科目數量。 接下來會有 m 行 (Rows) 資料。 每一行包含 n 個整數,代表該名學生在各個科目的分數,分數之間以空白分隔。 所有的輸入數值皆為整數。 成績範圍:[0, 100]。 m 與 n 的範圍:m >= 1, n >= 1。

輸出值的格式

請輸出一行,包含 n 個整數。 第 i 個整數代表第 i 個科目 (Column) 的平均成績(經過四捨五入)。 數字之間請用一個空白字元分隔。

各種需要注意的邊界條件

  1. 極小維度:只有 1 位學生或只有 1 個科目的情況 (m=1, n=1)。

  2. 極端數值:所有成績都是 0 分,或所有成績都是 100 分。

  3. 四捨五入臨界點:平均值剛好為 X.5 的情況(例如 80.5),Math.round 應該進位(例如變成 81)。

  4. 浮點數運算:計算平均時,若直接使用整數除法會導致小數部分被無條件捨去,必須換一種寫法。

  5. 不對稱矩陣:學生人數遠多於科目數,或科目數遠多於學生人數。

sample input1

3 2 80 90 70 85 90 95

sample output1

80 90

解釋: 共有 3 位學生,2 個科目。

  • 第 1 個科目的平均:(80 + 70 + 90) / 3 = 240 / 3 = 80。
  • 第 2 個科目的平均:(90 + 85 + 95) / 3 = 270 / 3 = 90。

sample input2

2 3 10 20 30 15 25 35

sample output2

13 23 33

解釋:

  • 第 1 科:(10+15)/2 = 12.5 -> 四捨五入為 13。
  • 第 2 科:(20+25)/2 = 22.5 -> 四捨五入為 23。
  • 第 3 科:(30+35)/2 = 32.5 -> 四捨五入為 33。

Comments

There are no comments at the moment.