#31. 日期合法性
日期合法性
你已经和老师一起看清了很多程序语言中的“是非”,这下,你又需要在没有老师的任何帮助下完成一个任务啦。
这次的题目也不是很难。测试程序将随机给你一个空格分隔了年、月、日的日期(其中的数字都是没有前导零的,也就是说7
不会被写成07
)。你将需要判断这个日期在我们的公历体系内是否真实存在。如果存在则输出YES
,否则输出NO
(注意输出的字母都一定是大写字母)。
测试程序给出的测试输入数据中,年、月、日都是正整数(也就是大于零的整数),均不大于 。
已知,一年有 1 月到 12 月,共 个不同的月份;其中 1 月、3 月、5 月、7 月、8 月、10 月、12 月有 个合法的日,分别为 1 日到 31 日;4 月、6 月、9 月、11 月有 个合法的日,分别为 1 日到 30 日。对于闰年,2 月有 个合法的日,分别为 1 日到 29 日;对于平年(不是闰年的年称为平年),2 月有 个合法的日,分别为 1 日到 28日。
对于不大于 3000 年的年份,闰年遵循如下规律:
- 非整百年,能被 整除的为闰年。
- 整百年,能被 整除的是闰年。
之后呢,你需要做很多的判断,会嵌套地用到我们已经学的if...else...
的结构。你将需要:
- 判断输入日期中的月份是不是合法的月份(这里特殊情况最少,建议第一层先判断);
- 针对每个月的日数判断输入日期中日的合法性;
- 注意抓住特殊的 2 月,在里面讨论年的问题(看是不是闰年);
- 对于闰年,允许 29 日的存在
- 对于非闰年不能允许 29 日的存在。
习题目的
- 练习
%
运算 - 练习使用
if
- 练习
if
嵌套 - 练习使用
else
输出时每行末尾的多余空格,不影响答案正确性
样例输入1
2016 2 29
样例输出1
YES
样例输入2
1900 2 29
样例输出2
NO
样例输入3
2016 13 32
样例输出3
NO