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

C語言 OJ 輸入輸出格式詳解:為何兩種輸出樣式都能 AC?

     編輯:程式設計綜合問答

題目背景

給定區間 [-2^31, 2^31] 內的三個整數 A、B、C,判斷 A+B 是否大於 C。輸入第一行為測試用例數 T (≤10),其後每行包含 A、B、C。輸出格式要求:Case #X: true 或 Case #X: false。

兩種常見輸出樣式

很多初學者會困惑:到底要輸出「所有輸入後再輸出結果」還是「讀一組、輸一組」?

樣式一:集中輸出

4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
Case #1: false
Case #2: true
Case #3: true
Case #4: false

樣式二:即時輸出

4
1 2 3
Case #1: false
2 3 4
Case #2: true
2147483647 0 2147483646
Case #3: true
0 -2147483648 -2147483647
Case #4: false

核心原因:標準輸入/輸出分離

在線評判系統(OJ)中,標準輸入 (stdin) 與標準輸出 (stdout) 是完全分離的管道。評判程式會:

  1. 一次性將測試數據寫入 stdin
  2. 運行你的程式,捕獲其 stdout 所有輸出
  3. 將捕獲的輸出與標準答案逐字符比對

因此,你的程式何時輸出、中間是否穿插輸入提示,評判系統完全不關心,只要最終 stdout 內容完全一致即可。這就是為何兩種樣式都能 Accepted 的原因。

實戰建議

  • 採用「讀一組、算一組、輸一組」的流式處理,記憶體佔用小,邏輯清晰
  • 不要在 stdout 輸出任何額外提示語(如 "Please input:"),否則會導致 Wrong Answer
  • 使用 scanf/cin 讀取,printf/cout 輸出即可

參考代碼 (C++)

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

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int T;
    if (!(cin >> T)) return 0;
    for (int cas = 1; cas <= T; ++cas) {
        long long A, B, C;
        cin >> A >> B >> C;
        cout << "Case #" << cas << ": " << (A + B > C ? "true" : "false") << '\n';
    }
    return 0;
}

理解 stdin/stdout 分離機制,是 OJ 刷題的基礎功力之一。

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