直接模拟过程就好了
直接模拟过程就好了
直接模拟过程就好了
直接模拟过程就好了
题目理解
1、题目大概意思:
* 给定一个初始公历日期:年 Y、月 M、日 D。
* 接下来会有 Q 次操作,每次操作让日期往前 / 往后平移若干天。
* 要求:按顺序执行完所有操作,输出最终的年月日。
2、就两种操作(记住就好了):
每行输入 op x:
* op = 1, x = 1:向后(未来)平移 x 天:2020-02-28 往后移 1 天 → 2020-02-29
* op = 2, x = 2:向前(过去)平移 x 天:2020-03-01 往前移 1 天 → 2020-02-29
注意:x 都是非负数,只代表移动天数,方向由 op 决定。
3、移动规则:
先判断是不是闰年,这样子决定2 月有多少天:
闰年判断规则:
1. 能被 400 整除 → 闰年(2 月 29 天)
2. 能被 4 整除 但 不能被 100 整除 → 闰年(2 月 29 天)
3. 其他情况 → 平年(2 月 28 天)
4、平年固定:
月份 天数 1月 31 2月 判断 3月 31 4月 30 5月 31 6月 30 7月 31 8月 31 9月 30 10月 31 11月 30 12月 31
可以用数组存储每月的天数
解题思路:
核心需求:日期加减天数,处理跨年、跨月、闰年二月天数差异。
1. 先写闰年判断函数,按题目规则判定闰年;
2. 写每月天数数组,区分平年 / 闰年的 2 月;
3. 统一逻辑:
* 向后加天数:日期不断 +1,当月天数不足则进一月 / 一年;
* 向前减天数:日期不断 -1,当月天数不足则退一月 / 一年;
我们可以拆解一下步骤:
算了,算了,直接上代码,自己理解吧