题解:洛谷 P5711 闰年判断

【题目来源】

洛谷:P5711 【深基3.例3】闰年判断 - 洛谷

【题目描述】

输入一个年份,判断这一年是否是闰年,如果是输出 \(1\),否则输出 \(0\)

【输入】

输入一个正整数 \(n\),表示年份。

【输出】

输出一行。如果输入的年份是闰年则输出 \(1\),否则输出 \(0\)

【输入样例】

1926

【输出样例】

0

【核心思想】

  1. 问题分析:输入一个年份,判断是否为闰年。闰年规则:能被 \(4\) 整除但不能被 \(100\) 整除,或者能被 \(400\) 整除。

  2. 算法选择

    • 逻辑条件判断:将闰年规则转化为布尔表达式直接判断
  3. 关键步骤

    • 读入数据cin >> year
    • 闰年判断
      • 条件:year % 4 == 0 && year % 100 != 0 || year % 400 == 0
      • 优先级:% > ==/!= > && > ||
      • 含义:(能被 4 整除 且 不能被 100 整除) 或 (能被 400 整除)
    • 输出结果:是闰年输出 1,否则输出 0
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\),单次模运算和逻辑判断
    • 空间复杂度:\(O(1)\),仅需一个整型变量
  5. 闰年判断的核心思想

    • 格里高利历规则:普通年份每 4 年一闰,但世纪年必须被 400 整除才闰(如 1900 不闰,2000 闰)
    • 运算符优先级&& 优先级高于 ||,表达式可省略括号,但理解时应注意分组
    • 短路求值:若 year % 4 != 0 则前半部分为假,继续判断 year % 400 == 0
    • 适用于日期计算、历法转换、条件判断类入门问题

【算法标签】

入门 #模拟

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件(万能头文件)
using namespace std;      // 使用标准命名空间

/**
 * 主函数 - 程序入口
 * @return 程序执行状态码(0表示成功)
 */
int main()
{
    int year;             // 定义年份变量
    cin >> year;          // 输入年份

    // 方法一(注释掉的原始方案):分步判断闰年条件
    // if(year%4==0 && year%100!=0) cout << 1;      // 普通闰年判断
    // else if(year%100==0 && year%400==0) cout << 1; // 世纪闰年判断
    // else cout << 0;                              // 非闰年情况

    // 方法二(实际采用的方案):合并判断闰年条件
    if (year%4==0 && year%100!=0 || year%400==0)  // 合并判断普通闰年和世纪闰年
    {
        cout << 1;  // 是闰年输出1
    }
    else
    {
        cout << 0;  // 不是闰年输出0
    }

    return 0;       // 程序正常结束
}

【运行结果】

1926
0
posted @ 2026-08-05 15:47  团爸讲算法  阅读(31)  评论(0)    收藏  举报