題目大意
- 輸入多組測試資料,每組第一行
n (學生數 ≤50)、m (課程數 ≤5)。
- 接續
n 行,每行 m 個整數分數。
- 輸出三行:
- 每位學生平均分(保留兩位小數)。
- 每門課平均分(保留兩位小數)。
- 全科分數均 ≥ 該科平均分的學生人數。
- 每組測試資料間輸出一空行。
演算法邏輯
- 讀入
n, m,二維陣列 a[n][m] 儲存分數。
- 計算學生平均:
stuAvg[i] = sum(a[i][j]) / m。
- 計算課程平均:
courseAvg[j] = sum(a[i][j]) / n。
- 統計達標學生:對每位學生檢查
a[i][j] >= courseAvg[j] 是否對所有 j 成立,成立則 count++。
- 格式化輸出:
printf("%.2f ", val),最後一項換行;空行用 printf("\n")。
AC 程式碼 (C 風格 I/O 避免流同步問題)
#include <cstdio>
#include <cstring>
int main() {
int n, m, i, j;
double a[50][5], stuAvg[50], courseAvg[5];
while (scanf("%d%d", &n, &m) == 2) {
memset(stuAvg, 0, sizeof(stuAvg));
memset(courseAvg, 0, sizeof(courseAvg));
for (i = 0; i < n; i++)
for (j = 0; j < m; j++) {
scanf("%lf", &a[i][j]);
stuAvg[i] += a[i][j];
courseAvg[j] += a[i][j];
}
for (i = 0; i < n; i++) stuAvg[i] /= m;
for (j = 0; j < m; j++) courseAvg[j] /= n;
for (i = 0; i < n; i++)
printf(i == n-1 ? "%.2f\n" : "%.2f ", stuAvg[i]);
for (j = 0; j < m; j++)
printf(j == m-1 ? "%.2f\n" : "%.2f ", courseAvg[j]);
int qualified = 0;
for (i = 0; i < n; i++) {
int ok = 1;
for (j = 0; j < m; j++)
if (a[i][j] < courseAvg[j]) { ok = 0; break; }
if (ok) qualified++;
}
printf("%d\n\n", qualified);
}
return 0;
}
關鍵細節
- 陣列下標從 0 開始,避免邊界錯誤。
- 輸出格式嚴格:每行尾無多餘空格,組間有空行。
- 使用
scanf/printf 比 cin/cout 更穩定通過大量資料測試。