解题思路:
主要分两种情况:
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 人评分