1 条题解

  • 0
    @ 2026-6-19 10:30:56

    📝 题目大意

    给定一个年份 nn1583<n<20231583 < n < 2023),判断该年是否为闰年——闰年有 366366 天,平年有 365365 天。

    💡 解题思路

    1. 题目分析:本题本质上就是判断格里高利历(Gregorian calendar)下的闰年。数据范围 1583<n<20231583 < n < 2023 非常小,直接 O(1)O(1) 判断即可。

    2. 算法推导:格里高利历的闰年规则为:

      • 若年份能被 400400 整除,则是闰年;
      • 否则,若年份能被 44 整除但不能被 100100 整除,则是闰年;
      • 其余情况均为平年。

      标准代码中用一个 if 语句直接实现了该逻辑:

      if (n % 400 == 0 || (n % 4 == 0 && n % 100 != 0)) cout << 366;
      else cout << 365;
      

      注意 || 的短路求值:先判断 n % 400 == 0(如 16001600 年),若不成立再判断 n % 4 == 0 && n % 100 != 0(如 19921992 年),其余情况输出 365365(如 2023202318001800 年)。

    3. 边界与细节

      • 能被 400400 整除的年份(如 16001600)同时也是 44100100 的倍数,但按闰年规则应输出 366366,因此 n % 400 == 0 必须放在 || 前面优先判断。
      • 能被 100100 整除但不能被 400400 整除的年份(如 18001800)是平年,输出 365365
      • 输入范围 nn 较小,使用 int 即可。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅做常数次取模和比较运算。
    • 空间复杂度O(1)O(1),仅使用常数个变量。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int n;
        cin >> n;
        // 格里高利历闰年规则:
        // 1. 能被400整除 → 闰年(366天)
        // 2. 能被4整除但不能被100整除 → 闰年(366天)
        // 3. 其余 → 平年(365天)
        if(n % 400 == 0 || ( n % 4 == 0 && n % 100 != 0)) cout << 366;
        else cout << 365;
        return 0;
    }
    
    • 1

    信息

    ID
    814
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者