文章

【GESP】C++一级真题练习(202303)luogu-B3835,每月天数

GESP一级真题练习。为2023年3月一级认证真题。

luogu-B3835 每月天数

题目要求

描述

小明刚刚学习了每月有多少天,以及如何判断平年和闰年,想到可以使用编程方法求出给定的月份有多少天。你能做到吗?

输入

输入一行,包含两个整数 $A,B$,分别表示一个日期的年、月。约定 $2000 \leq A \leq 3000$,$1 \leq B \leq 12$。

输出

输出一行,包含一个整数,表示输入月份有多少天。

输入样例-1

2022 1

输出样例-1

31

输入样例-2

2020 2

输出样例-2

29


题目分析

根据题目描述,我们可以分析出以下解题思路:

  1. 输入处理:
    • 读入两个整数 A 和 B,分别表示年份和月份。
  2. 判断月份天数:
    • 对于 1, 3, 5, 7, 8, 10, 12 月,天数为 31 天。
    • 对于 4, 6, 9, 11 月,天数为 30 天。
    • 对于 2 月,需要判断是否为闰年:
      • 如果是闰年,2 月有 29 天。
      • 如果是平年,2 月有 28 天。
  3. 闰年判断:
    • 闰年的条件:能被 4 整除但不能被 100 整除,或者能被 400 整除。
  4. 输出结果:
    • 根据判断结果,输出对应月份的天数。

这道题目涉及了以下知识点:

  • 输入输出操作
  • 条件判断(if-else 语句)
  • 闰年的判断条件
  • 月份天数的判断逻辑

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;

int main() {
    // 定义年份和月份变量
    int year, month;
    
    // 从标准输入读取年份和月份
    cin >> year >> month;

    // 判断月份天数
    // 31天的月份:1,3,5,7,8,10,12月
    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
        month == 10 || month == 12) {
        cout << 31;
    }
    // 30天的月份:4,6,9,11月
    else if (month == 4 || month == 6 || month == 9 || month == 11) {
        cout << 30;
    }
    // 2月特殊处理:需要判断是否闰年
    else if (month == 2) {
        // 闰年判断:能被4整除但不能被100整除,或者能被400整除
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            cout << 29;  // 闰年2月29天
        } else {
            cout << 28;  // 平年2月28天
        }
    }
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP 学习专题站:GESP WIKI

luogu-”系列题目可在洛谷题库进行在线评测。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

欢迎加入Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答

欢迎加入C++ GESP/CSP认证学习QQ频道,考试资源总结汇总

欢迎加入C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
本文由作者按照 CC BY-NC-SA 4.0 进行授权