题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6112
题目分析:
365%7=1,过一个平常年星期数多一天,用sum计算隔了多少天,如果sum%7==0那么这年的同一天和所求天的星期一致。特别要主注意闰年和2月29日,如果是在2月29日之前,如果今年是闰年,sum+=2,如果是平常年sum+=1。如果是2月29日之后,那么考虑下一年是否是闰年,如果是闰年,则sum+=2,如果是平常年sum+=1。
#include<iostream>
#include<cstdio>
using namespace std;
bool leapYear(int year){
return year%400==0||(year%4==0&&year%100!=0);
}
int main(void)
{
int n;
cin>>n;
while(n--){
int a,b,c,sum=0;
scanf("%d-%d-%d",&a,&b,&c);
int y = a;
do{
if(b==1||(b==2&&c<29)){
if(leapYear(y)){
sum+=2;
}
else{
sum+=1;
}
}
else{
if(leapYear(y+1)){
sum+=2;
}
else{
sum+=1;
}
}
y++;
}while(sum%7!=0 || ((b==2&&c==29)?!leapYear(y):0));
cout<<y<<endl;
}
}