跳到內容

04|閏年判斷

還沒完成C 或 C++ 皆可CPU 時間上限 1 秒

相關主題: C 基礎速查

C 或 C++ 皆可|CPU 時間上限 1 秒

西曆(格里曆)的閏年規則是:

  • 能被 4 整除、但不能被 100 整除的年份是閏年,例如 2024
  • 能被 400 整除的年份也是閏年,例如 2000
  • 其他年份都是平年,例如 2023、1900

給你 T 個年份,判斷每一個是閏年還是平年。這一題所有年份都套用上面的規則,不用考慮歷史上曆法的改變。

第一行是一個整數 T(1 ≤ T ≤ 1000),代表有幾個年份。

接下來 T 行,每行一個整數 y(1 ≤ y ≤ 100,000),代表一個年份。

輸出 T 行,依照輸入的順序,每個年份輸出一行:閏年輸出 leap,平年輸出 common(全部小寫)。

輸入:

6
2024
2023
1900
2000
2100
2400

輸出:

leap
common
common
leap
common
leap
  • if / else if / else 的條件判斷
  • 判斷整除:y % 4 == 0 表示 y 是 4 的倍數
  • 邏輯運算子:&&(而且)、||(或者)、!(不是)
  • && 的優先順序比 || 高;不確定的時候就加括號,讓程式更好讀
  • 把判斷寫成函式 is_leap(y),回傳真或假,main 只負責輸入和輸出
  • C:要用 bool、true、false 需要 #include <stdbool.h>
  • C++:bool 是內建型別,不用額外 include
提示 1:把規則直接翻成條件式

「能被 4 整除而且不能被 100 整除」或者「能被 400 整除」:

(y % 4 == 0 && y % 100 != 0) || y % 400 == 0
提示 2:用 if / else if 寫時,順序很重要

如果第一個判斷就是「能被 4 整除 → 閏年」,那 1900 會被誤判成閏年,因為它根本不會走到後面「能被 100 整除」的判斷。

用 if / else if 一層一層寫時,要從最特殊的情況開始判斷:先看 400,再看 100,最後看 4。

提示 3:讀入 T 筆資料的迴圈

先讀 T,再用 for 迴圈跑 T 次,每次讀一個年份、馬上輸出結果就好,不需要先把所有年份存起來。