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

PAT 統計數字出現次數:scanf 讀取換行符導致超時修正

     編輯:程式設計綜合問答

原始碼超時原因

while ((ch = getchar()) != '\n')  // ❌ 測試資料可能無換行符結尾 (EOF)
    count[ch - '0']++;

若輸入以 **EOF 結尾** 而非 `\n`,迴圈永不結束 → **TLE (Time Limit Exceeded)**。

修正:讀整行字串再統計

#include <stdio.h>
#include <string.h>

int main() {
    char s[1005];
    if (scanf("%1004s", s) != 1) return 0; // %s 自動跳過空白、讀到空白/EOF 停止
    int count[10] = {0};
    for (int i = 0; s[i]; i++)
        if (s[i] >= '0' && s[i] <= '9')
            count[s[i] - '0']++;
    for (int i = 0; i < 10; i++)
        if (count[i]) printf("%d:%d\n", i, count[i]);
    return 0;
}

關鍵點

  • `%s` 格式讀取**非空白字串**,自動處理換行/EOF,適合題目「不超過 1000 位整數」。
  • 陣列大小開 1005 防溢位。
  • 輸出格式嚴格遵循 `D:M` 升序。

複雜度

時間 O(n),空間 O(1),極易通過。

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