题目描述
题目传送门 >> 合法日期
【问题描述】 小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。 没想到,日记很快就被老师发现了问题,原来小蓝记完 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 <stdio.h>
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;
}
法二
#include <stdio.h>
int 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<month[m])
printf("yes");
else
printf("no");
return 0;
}
测试用例
测试1 输入:
15
9
输出:
no
测试2 输入:
2
30
输出:
no
|