題目要求
- 輸入 21 世紀某截止年份 (2001-2099)。
- 輸出從 2001 年到該年份間所有閏年,每行一個。
- 輸入非 21 世紀年份輸出
Invalid year!。
- 無閏年輸出
None。
- 使用
while 循環和 if 語句。
閏年判斷規則
(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
完整代碼實現
#include <stdio.h>
int main() {
int year, current, found = 0;
// 讀取多組測試用例直到 EOF
while (scanf("%d", &year) == 1) {
found = 0;
// 輸入合法性檢查
if (year <= 2000 || year >= 2100) {
printf("Invalid year!\n");
continue;
}
current = 2001; // 21 世紀起始年
while (current <= year) {
if ((current % 4 == 0 && current % 100 != 0) || (current % 400 == 0)) {
printf("%d\n", current);
found = 1;
}
current++;
}
if (!found) {
printf("None\n");
}
}
return 0;
}
關鍵點解析
- while 讀取輸入:
while (scanf("%d", &year) == 1) 處理多行輸入直到 EOF。
- 邊界檢查:21 世紀為 2001-2099,
year <= 2000 || year >= 2100 視為非法。
- while 遍歷年份:從 2001 遞增到截止年份,逐一判斷閏年條件。
- 標記變量:
found 記錄是否輸出過閏年,決定是否打印 None。
測試用例
| 輸入 | 輸出 |
| 2048 | 2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048 (每行一個) |
| 2000 | Invalid year! |
| 2001 | None |
| 2100 | Invalid year! |