解题思路:
主要分两种情况:
1、输入日期比起点日期要晚,一天一天的增加,达到目标的时候直接输出,跳出循环。
2、输入日期比起点日期要早,一天一天的减少,达到目标的时候直接输出,跳出循环。
本题将2022年1月1日为分界点,year大于等于2022,都比起点日期要晚。
注意事项:
1、闰年的判断,只影响2月份的天数。
2、因为只有一次输入数据,达到目标数时,直接return。多组数据的时候不能写。
参考代码:
int isLeap(int y)
{
if (y % 400 == 0) {
return 1;
} else if (y % 4 == 0 && y % 100 != 0) {
return 1;
}
return 0;
}
int main()
{
int y, m, d;
int cnt;
int i, j, k;
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
scanf("%d %d %d", &y, &m, &d);
if (y >= 2022) {
// 2022年1月1日是周六,因为代码会先加1,所以从5开始
cnt = 5;
for (i = 2022; i <= y; i++) {
if (isLeap(i)) {
days[1] = 29;
} else {
days[1] = 28;
}
for (j = 1; j <= 12; j++) {
for (k = 1; k <= days[j-1]; k++) {
cnt = cnt + 1;
if (cnt > 7) {
cnt = 1;
}
if (i == y && j == m && k == d) {
printf("%d", cnt);
return;
}
}
}
}
} else {
cnt = 6;
for (i = 2021; i >= y; i--) {
if (isLeap(i)) {
days[1] = 29;
} else {
days[1] = 28;
}
for (j = 12; j >= 1; j--) {
for (k = days[j-1]; k >= 1; k--) {
cnt = cnt - 1;
if (cnt == 0) {
cnt = 7;
}
if (i == y && j == m && k == d) {
printf("%d", cnt);
return;
}
}
}
}
}
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复