思路很简单:判断前面的那一天到1970年的天数取模7和当前的是否相同
坑点:如果是2月的29日,需要判断当前年是否是闰年
谨以此文纪念今天沙雕的我
To be one!
#include <bits/stdc++.h>
using namespace std;
int getDaysFrom1970(int year, int month, int day){
int days = 0;
for (int i = 1970; i < year; i++){
if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0)days += 366;
else days += 365;
}
switch (month - 1){
case 11 : days += 30;
case 10 : days += 31;
case 9 : days += 30;
case 8 : days += 31;
case 7 : days += 31;
case 6 : days += 30;
case 5 : days += 31;
case 4 : days += 30;
case 3 : days += 31;
case 2 : if(year % 4 == 0 && year % 100 || year % 400 == 0)days += 29;else days += 28;
case 1 : days += 31;
}
days += day;
return days;
}
int main()
{
int year, month, day;
while (~scanf("%d %d %d", &year, &month, &day)){
int days = getDaysFrom1970(year, month, day);
int moded = days % 7;
int sum;
int res;
for (int i = year + 1; ; i++){
sum = getDaysFrom1970(i, month, day);
if(month == 2 && day == 29){
if(sum % 7 == moded && i % 4 == 0 && i % 100 != 0 || i % 400 == 0){
res = i;
break;
}
}
else if(sum % 7 == moded){
res = i;
break;
}
}
printf("%04d\n", res);
}
return 0;
}