题目描述:

    1949年的国庆节(10月1日)是星期六。
    今年(2012)的国庆节是星期一。
    那么,从建国到现在,有几次国庆节正好是星期日呢?

    只要答案,不限手段!
    可以用windows日历,windows计算器,Excel公式,。。。。。
    当然,也可以编程!
    不要求写出具体是哪些年,只要一个数目!
    千万不要提交源代码!
    答案不要写在这里,写在“解答.txt”中

 

思路:一般的日期计算,吧星期日当做星期7算就可以了,对所在天数取余,9月算完在加一天对七取余看看是不是7,如果是那么成立并输出答案,不是不成立。

注意:闰年的判断,月份天数的判断(二月十分重要),边界问题。

 

AC代码:

#include<stdio.h>
int Run(int year)
{
if(year%400==0||(year%4==0&&year%100!=0))
return 1;
else
return 0;
}
int month(int year,int n)
{
int aws;
switch(n)
{
case 1:aws=31;break;
case 2:{
if(Run(year))
aws=29;
else aws=28;
}break;
case 3:aws=31;break;
case 4:aws=30;break;
case 5:aws=31;break;
case 6:aws=30;break;
case 7:aws=31;break;
case 8:aws=31;break;
case 9:aws=30;break;
case 10:aws=31;break;
case 11:aws=30;break;
case 12:aws=31;break;
}
return aws;
}
int main()
{
int i,j,x,sum;
sum=5;
for(i=10;i<=12;i++)
{
sum+=month(1949,i);
}
for(i=1950;i<=2013;i++)//今天是2014年3月14日,所以算到2013年即可
{
for(j=1;j<=12;j++)
{
sum+=month(i,j);
if(j==9)
{
x=sum%7;
if(x+1==7)
printf("%d年的国庆节是星期日。\n",i);
}
}
}
return 0;
}

打印结果:

1950年的国庆节是星期日。
1961年的国庆节是星期日。
1967年的国庆节是星期日。
1972年的国庆节是星期日。
1978年的国庆节是星期日。
1989年的国庆节是星期日。
1995年的国庆节是星期日。
2000年的国庆节是星期日。
2006年的国庆节是星期日。

所以本题答案为9天