#include <stdio.h>
void main ()
{
FILE *fin = fopen ("friday.in", "r");
FILE *fout = fopen ("friday.out", "w");
int i,j,N,days=13,Week[7]={0},Month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //Week记录13号在星期几的天数,Month列出每月的天数
fscanf (fin,"%d", &N);
for(i=0;i<N;i++)
{
Month[1]=((i+1900)%4==0&&(i+1900)%100!=0)||(i+1900)%400==0?29:28; //闰年2月29天,平年28天
for(j=0;j<12;j++)
{
Week[(days-1)%7]++; //days-1是因为数组下标从零开始
days+=Month[j];//加到下个月13号
}
}
for(i=5;i<12;i++)
fprintf (fout,"%d%c",Week[i%7],i==11?'\n':' ');
exit (0);
}
这道题要注意的是闰年的问题,还要注意边界问题,如1月、12月。初始时日期设到13号,之后每次进一个月的时候days相应加上该月的天数。细节方面要注意输出是从周六开始,因为没注意到这点,浪费了很多时间调试。要强迫自己看进去英文的题目说明。