用模拟的方法算很繁琐,而且很容易出错。
其实可以用蔡勒公式,快速求某一天是星期几。
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
bool isLeapYear(int y)
{
return ( (y%100!=0)&&(y%4==0) ) || (y%400==0);
}
//0=Monday..6=Sunday
int getweekdays(int y, int m, int d)
{
//一二月份看成前一年的13、14月份
if(m==1 || m==2 )
{
m+=12;
--y;
}
return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
}
int main()
{
int t,m,y,d;
scanf("%d", &t);
for (int i=0;i<t; ++i)
{
scanf("%d%d%d", &m, &d, &y);
int k=getweekdays(y,m,d);
//还得等k天才到下一个Sunday
if(k==6)
{
k=7;
}
else
{
k=6-k;
}
bool tag=isLeapYear(y);
days[1]+=tag;//闰年二月要多加一天
d+=k;
if ( d>days[m-1] )
{
d-=days[m-1];
++m;
if( m>12) //下一个月已到新一年
{
m=1;
++y;
}
}
//利用c语言的格式化输出很方便
printf("%02d %02d %d/n",m, d, y);
days[1]-=tag;//记得还原
}
return 0;
}