首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

HDU 2023 求平均成績:多測試案例輸出格式控制詳解

     編輯:C++ 入門

HDU 2023 求平均成績:多測試案例輸出格式控制詳解

輸入多組測試案例,每組:n 學生、m 門課(n≤50, m≤5),後接 n×m 分數。輸出:
1. n 個學生平均分(保留 2 位小數)
2. m 個課程平均分(保留 2 位小數)
3. 所有課程分數均 ≥ 該課平均分的學生人數
每組輸出後空一行。

算法邏輯

  • 讀入 n, m 直到 EOF。
  • stu[i] 累加第 i 學生總分,course[j] 累加第 j 課程總分。
  • 計算平均:stu_avg[i] = stu[i]/m, course_avg[j] = course[j]/n。
  • 統計「全科達標」學生:對每學生檢查 score[i][j] >= course_avg[j] 是否對所有 j 成立。
  • 格式化輸出:printf("%.2f", ...),空格分隔,行末無多餘空格,組間空行。

完整 AC 代碼

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    bool firstCase = true;
    while (cin >> n >> m) {
        if (!firstCase) cout << '\n';  // 組間空行
        firstCase = false;

        vector<vector<double>> a(n, vector<double>(m));
        vector<double> stu_sum(n, 0), course_sum(m, 0);

        for (int i = 0; i < n; ++i)
            for (int j = 0; j < m; ++j) {
                cin >> a[i][j];
                stu_sum[i] += a[i][j];
                course_sum[j] += a[i][j];
            }

        vector<double> stu_avg(n), course_avg(m);
        for (int i = 0; i < n; ++i) stu_avg[i] = stu_sum[i] / m;
        for (int j = 0; j < m; ++j) course_avg[j] = course_sum[j] / n;

        // 輸出學生平均
        for (int i = 0; i < n; ++i) {
            if (i) cout << ' ';
            cout << fixed << setprecision(2) << stu_avg[i];
        }
        cout << '\n';

        // 輸出課程平均
        for (int j = 0; j < m; ++j) {
            if (j) cout << ' ';
            cout << fixed << setprecision(2) << course_avg[j];
        }
        cout << '\n';

        // 統計全科達標學生
        int cnt = 0;
        for (int i = 0; i < n; ++i) {
            bool ok = true;
            for (int j = 0; j < m; ++j)
                if (a[i][j] + 1e-9 < course_avg[j]) { ok = false; break; }
            if (ok) ++cnt;
        }
        cout << cnt << '\n';
    }
    return 0;
}

關鍵細節

  1. 浮點比較:a[i][j] + 1e-9 < course_avg[j] 避免精度誤差導致誤判。
  2. 輸出格式:fixed << setprecision(2) 保證兩位小數;組間空行用 firstCase 標記控制。
  3. 多測試案例:while (cin >> n >> m) 自動處理 EOF。

複雜度

  • 時間:O(總學生數 × 總課程數),極小。
  • 空間:O(n×m) 存分數矩陣,或可流式處理進一步優化至 O(m)。

總結

HDU 2023 是基礎輸入輸出與格式控制題。核心難點在於多組輸出格式精確控制(小數位、空格、空行)與浮點比較容差。掌握 iomanip 格式化輸出、vector 動態存儲、EOF 循環讀取,即可穩健 AC。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved