首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ACM 題目:學生與課程平均分計算及全科達標人數統計(C++ 解法)

     編輯:程式設計綜合問答

題目大意

  • 輸入多組測試資料,每組第一行 n (學生數 ≤50)、m (課程數 ≤5)。
  • 接續 n 行,每行 m 個整數分數。
  • 輸出三行:
    1. 每位學生平均分(保留兩位小數)。
    2. 每門課平均分(保留兩位小數)。
    3. 全科分數均 ≥ 該科平均分的學生人數。
  • 每組測試資料間輸出一空行。

演算法邏輯

  1. 讀入 n, m,二維陣列 a[n][m] 儲存分數。
  2. 計算學生平均:stuAvg[i] = sum(a[i][j]) / m。
  3. 計算課程平均:courseAvg[j] = sum(a[i][j]) / n。
  4. 統計達標學生:對每位學生檢查 a[i][j] >= courseAvg[j] 是否對所有 j 成立,成立則 count++。
  5. 格式化輸出: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 更穩定通過大量資料測試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved