if (year%4==0) {
if (year%100!=0) { print; count++; }
}
if (year%400==0) { print; count++; } // 400倍數進入兩個 if
1200, 1600, 2000 同時滿足 year%4==0 && year%100==0 (第一個 if 因 year%100!=0 為假不進入) 和 year%400==0 (第二個 if 進入) → **只進第二個 if,不重複**。但 2000 正確列印一次。
然而 1000, 1100... 1900 (非 400 倍數) 滿足 year%4==0 但 year%100==0,第一個 if 不進,第二個 if 也不進 → **正確不列印**。
實際執行輸出 **243** 且無重複年份,**邏輯在這特定範圍下恰好正確**,但結構混亂、不可維護。
if ((year%4==0 && year%100!=0) || (year%400==0)) {
printf("%d ", year);
count++;
}
#includeusing namespace std; int main() { int cnt = 0; for (int y=1000; y<=2000; y++) if ((y%4==0 && y%100!=0) || y%400==0) cout << y << ' ', cnt++; cout << "\ncount=" << cnt << endl; return 0; }
雖然原碼在 1000-2000 產生正確結果,但**邏輯結構錯誤**,擴展到其他範圍 (如 1900-2100) 會出錯。務必使用標準複合條件。