統計字符串中出現次數最多的小寫字母,若並列則輸出 ASCII 碼最小者。輸入多組測試數據,每行長度 ≤ 1000。
scanf("%d", &t);
for(g=1; g<=t+1; g++) { // 循環次數多一次
// ...
ch=getchar(); // 首次讀取殘留的 '\n'
// ...
}
關鍵問題:scanf("%d") 讀取整數後,緩衝區殘留換行符 \n,導致首次 getchar() 讀到空行,統計邏輯錯位。
#include
int main(void) {
int count[27] = {0}, t, g, i, idx, max;
char ch;
scanf("%d", &t);
getchar(); // 關鍵:吞掉 scanf 留下的換行符
for(g=1; g<=t; g++) { // 修正循環次數
for(i=1; i<=26; i++) count[i]=0;
for(i=1; i<=1000; i++) {
ch=getchar();
if(ch=='\n') break;
idx = ch - 'a' + 1;
count[idx]++;
}
max = -1;
for(i=1; i<=26; i++)
if(count[i] > max) { max = count[i]; idx = i; }
printf("%c %d\n", 'a' + idx - 1, max);
}
return 0;
}
scanf("%d") 讀數字後,緩衝區留 \ngetchar()/scanf("%c") 會讀到此 \ngetchar() 吞掉、或 scanf(" %c") 前加空格跳過空白fflush(stdin) 非標準,不推薦移植代碼使用變量命名見名知義:z[] → count[]、t → caseNum、xia → maxIdx,提升可讀性與維護性。