题目描述
小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。
没想到,日记很快就被老师发现了问题,原来小蓝记完 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
分析:
在公历中,大多数月份的天数是固定的,但有几个月份的天数会根据年份的不同而变化。以下是每个月份的天数规则:
- 1月:31天
- 2月:28天(闰年为29天)
- 3月:31天
- 4月:30天
- 5月:31天
- 6月:30天
- 7月:31天
- 8月:31天
- 9月:30天
- 10月:31天
- 11月:30天
- 12月:31天
要确定某一年的某个月是31天还是30天,你可以根据上述规则直接判断。例如,如果你想知道2024年的4月有多少天,你可以直接查看规则,知道4月有30天。
在编程中,你可以根据这些规则来判断某一年的某个月的天数。例如,在C语言中,你可以这样写:
#include <stdio.h>
int main() {
int year, month;
printf("请输入年份和月份(例如:2024 4):");
scanf("%d %d", &year, &month);
int days;
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
days = 31;
break;
case 4: case 6: case 9: case 11:
days = 30;
break;
case 2:
days = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) ? 29 : 28;
break;
default:
printf("请输入有效的月份。\n");
return 1;
}
printf("%d年的%d月有%d天。\n", year, month, days);
return 0;
}
这段代码使用switch
语句来判断月份,并根据月份返回相应的天数。对于2月,它使用了一个单独的条件判断来确定是否是闰年。如果输入的月份不是1到12之间的数字,程序会提示用户输入有效的月份。
代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int m,d;
int a[21] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d%d",&m,&d);
if(d<=a[m]) printf("yes");
else printf("no");
return 0;
}