文章

【GESP】C++一级模拟luogu-B3993,明日复明日

2024年GESP一级模拟题,日期、时间计算题。

luogu-B3993

题目要求

描述

给定一个日期,要求输出它的后一天的日期。假设今年不是闰年。

输入包括两个整数,分别表示月份和日期。你需要编写一个程序来计算并输出这个日期的后一天。如果输入的日期是年末的最后一天(12 月 31 日),则需要输出下一年的 1 月 1 日。

输入

输入只有一行,包括两个整数,分别表示月份 M 和日期 D 。

  • M 是一个整数,表示月份(1≤M≤12)。
  • D 是一个整数,表示日期(1≤D≤31,且不大于当月的最大天数)。

输出

输出一行,包含两个整数,分别表示后一天的月份和日期。

输入样例-1

3
14

输出样例-1

3
15

输入样例-2

4
30

输出样例-2

5
1

输入样例-3

12
31

输出样例-3

1
1


题目分析

【GESP】C++一级真题练习(202303)luogu-B3835,每月天数类似,分月处理最后一天的情况即可。

详见代码注释。

示例代码

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
32
33
34
#include <iostream>
using namespace std;

int main() {
    int month, day; // 定义月份和日期变量
    cin >> month >> day; // 从输入流中读取月份和日期

    // 处理2月28日的情况
    if (month == 2 && day == 28) {
        month += 1; // 进入下一个月
        day = 0; // 日期重置为1
    }
    // 处理1、3、5、7、8、10月31日的情况
    if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||
         month == 10) &&
        day == 31) {
        month += 1; // 进入下一个月
        day = 0; // 日期重置为1
    }
    // 处理12月31日的情况
    if (month == 12 && day == 31) {
        month = 1; // 进入下一年的1月
        day = 0; // 日期重置为1
    }
    // 处理4、6、9、11月30日的情况
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 30) {
        month += 1; // 进入下一个月
        day = 1; // 日期设置为1
    } else {
        day += 1; // 其他情况下,日期加1
    }
    cout << month << " " << day; // 输出结果
    return 0;
}

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

题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

本文由作者按照 CC BY 4.0 进行授权