题解:洛谷 P5716 月份天数

【题目来源】

洛谷:P5716 【深基3.例9】月份天数 - 洛谷

【题目描述】

输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。

【输入】

输入两个正整数,分别表示年份 \(y\) 和月数 \(m\),以空格隔开。

【输出】

输出一行一个正整数,表示这个月有多少天。

【输入样例】

1926 8

【输出样例】

31

【核心思想】

  1. 问题分析:给定年份 \(y\) 和月份 \(m\),输出该月的天数。需考虑闰年对2月天数的影响(闰年29天,平年28天),其他月份天数固定(1,3,5,7,8,10,12月31天;4,6,9,11月30天)。

  2. 算法选择

    • switch分支:按月份分12个case,2月单独处理闰年判断,其余月份直接输出固定天数
  3. 关键步骤

    • 读入数据cin >> y >> m
    • switch(m)
      • case 2:闰年判断 y%4==0 && y%100!=0 || y%400==0,真则输出29,否则28
      • 大月(1,3,5,7,8,10,12):输出31
      • 小月(4,6,9,11):输出30
    • 输出对应天数
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\),单次判断和输出
    • 空间复杂度:\(O(1)\),仅需两个整型变量
  5. 日期查询的核心思想

    • 固定规则查表:除2月外各月天数固定,可用switch直接映射
    • 闰年特殊处理:2月天数依赖年份,需嵌入闰年判断逻辑
    • 格里高利历规则y%4==0 && y%100!=0 || y%400==0 精确判断闰年
    • 适用于日期计算、日历查询、条件分支类入门问题

【算法标签】

入门 #模拟

【代码详解】

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

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

    // 使用switch语句处理不同月份的天数
    switch(m)
    {
        case 1:          // 一月
            cout << 31;
            break;
        case 2:          // 二月(特殊处理闰年)
            if(y%4==0 && y%100!=0 || y%400==0)
                cout << 29;  // 闰年2月29天
            else
                cout << 28;  // 平年2月28天
            break;
        case 3:          // 三月
            cout << 31;
            break;
        case 4:          // 四月
            cout << 30;
            break;
        case 5:          // 五月
            cout << 31;
            break;
        case 6:          // 六月
            cout << 30;
            break;
        case 7:          // 七月
            cout << 31;
            break;
        case 8:          // 八月
            cout << 31;
            break;
        case 9:          // 九月
            cout << 30;
            break;
        case 10:         // 十月
            cout << 31;
            break;
        case 11:         // 十一月
            cout << 30;
            break;
        case 12:         // 十二月
            cout << 31;
            break;
    }

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

【运行结果】

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