//译题
//★Friday the Thirteenth 黑色星期五
13 号又是星期五是一个不寻常的日子吗?
13 号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在n 年里13
日落在星期一,星期二......星期日的次数.这个测试从1900 年1 月1 日到
1900+n-1 年12 月31 日.n 是一个非负数且不大于400.
这里有一些你要知道的:
1900 年1 月1 日是星期一.
4,6,11 和9 月有30 天.其他月份除了2 月有31 天.闰年2 月有29 天,平年2 月有28 天.
年份可以被4 整除的为闰年(1992=4*498 所以 1992 年是闰年,但是1990 年不是闰年)
以上规则不适合于世纪年.可以被400 整除的世纪年为闰年,否则为平年.所以,1700,1800,1900 和
2100 年是平年,而2000 年是闰年.
请不要预先算好数据!
PROGRAM NAME: friday
INPUT FORMAT
一个整数n.
SAMPLE INPUT (file friday.in)
20
OUTPUT FORMAT
七个在一行且相分开的整数,它们代表13 日是星期六,星期日,星期一.....星期五的次数.
SAMPLE OUTPUT (file friday.out)
36 33 34 33 35 35 34
/*
ID: china_l
LANG: C
TASK: friday
*/
#include<stdio.h>
int main()
{
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int day[7]={0};
int i,j,n,t=1900,m=6;
freopen("friday.in","r",stdin);
freopen("friday.out","w",stdout);
scanf("%d",&n);
t+=n;
for(i=1900;i<t;i++)
{
if(i%400 == 0 ||(i%100!=0 && i%4 == 0)) //判断是否是闰年
mon[1]=29; //是,2月为29天
else mon[1]=28; //不是,2月为28天
for(j=0;j<12;j++) //然后计算每个月的13号是星期几
{ //因为1900.1.1是星期一,1900.1.13是星期六,最开始m=6代表的就是1.13号是星期六
day[m]++; //在数组中对应的星期+1(day[0-6],分别对应星期日,星期一到星期六)
m+=mon[j]; //加上本月的天数,得到下个月13号的天数
m%=7; //%7,得到下个月的13号对应的是星期几
} //因为7%7=0;所以星期天的总天数存放在day[0]中
}
printf("%d",day[6]); //按照题目意思,先打印星期六
for(i=0;i<6;i++) //然后打印星期天,星期一到星期五
printf(" %d",day[i]);
printf("
");
return 0;
}