題目要求輸入 T 組測資,每組給 a, b 區間,統計包含數字 6 且不含數字 9 的整數個數。原始碼在 while(scanf("%d",&n)==1) 迴圈中處理多組測資,但計數器 k 與測資數 n 的邏輯錯誤,導致第二組之後結果錯誤。
while(scanf("%d",&n)==1) { // n 只讀一次,之後不再更新
// ...
k++;
if(k>=n) break; // k 遞增,n 不變,永遠只能跑 n 組
}
實際上 n 是總測資組數,應在每組處理完後遞減 n--,或改用 for(int i=0;i
int T;
scanf("%d", &T); // 讀取總測資組數
while (T--) { // 每處理一組 T 遞減,自然結束
long a, b;
scanf("%ld %ld", &a, &b);
long count = 0;
for (long i = a; i <= b; i++) {
long t = i;
bool has6 = false, has9 = false;
while (t) {
int d = t % 10;
if (d == 6) has6 = true;
if (d == 9) { has9 = true; break; }
t /= 10;
}
if (has6 && !has9) count++;
}
printf("%ld\n", count);
}
while(T--) 或 for 迴圈,避免手動管理計數器。count、has6、has9 等在每組測資內部宣告/重置,防止跨組污染。a、b 可能為 0,while(t) 在 t=0 時不執行,需額外處理 0 本身是否含 6/9(題目通常 0 不含 6,故不計入)。b 很大(如 10^9),逐數檢查會超時,需改用數位 DP (Digit DP) 算法,但本題測資範圍不明,先確保邏輯正確。養成「讀總數 → 迴圈總數次 → 每次內部變數歸零」的模板習慣,能避免 90% 多組測資錯誤。