- 题目描述
- 解题思路
- 解题代码
- C语言
- 法一
- 法二
- 测试用例
题目传送门 >> 合法日期
【问题描述】
小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。
没想到,日记很快就被老师发现了问题,原来小蓝记完 8 月 31 日的日记,竟又记了 8 月 32 日和 8 月 33 日的日记。这显然是有问题的,因为根本没有 8 月 32 日和 8 月 33 日。
给定一个月份和一个日期,请问 2021 年有没有这一天。
【输入描述】
输入的第一行包含一个整数 m,表示月份。
第二行包含一个整数 d,表示日期。
其中,1≤m≤20,1≤d≤40。
【输出描述】
如果2021年有 m 月 d 日,输入 yes,否则输出 no。
【输入输出样例】
示例1
输入:
8 32
输出:
no
示例2
输入:
2 28
输出:
yes
【运行限制】
• 最大运行时间:1s
• 最大运行内存: 128M
解题思路
【总体思路】
题目已经给了是2021年,我们就可以直接知道2月最多28天。
但这题有个易错点,没去判断月份是否小于等于12。要注意到题目中输入值描述中提到:月份1≤m≤20,日期1≤d≤40,故我们要先判断是否满足m ≤ 12。
【代码思路】
有两种方法:
第一种则是嵌套if :若满足m ≤ 12,则判断月份是多少,d是否小于该月最大日期。
第二种方法是用数组存放每个月的最大日期,然后直接与数组相应值去对比日期。
解题代码 C语言 法一
#include法二int main() { int month, day; scanf("%d",&month); scanf("%d",&day); if(month<13){ if(month==2){ if (day<=28){ printf("yes"); } else{ printf("no"); } return 0; } if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){ if (day<=31){ printf("yes"); } else{ printf("no"); } return 0; } else{ if (day<=30){ printf("yes"); } else{ printf("no"); } return 0; } }else{ printf("no"); } return 0; }
#includeint main() { int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int m,d; scanf("%d",&m); scanf("%d",&d); if(m>0 && m<13 && d 测试用例 测试1
输入:15 9输出:
no测试2
输入:2 30输出:
no



