Description
13号又是一个星期5。13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出N年的一个周期,要求计算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年是闰年.请不要预先算好数据(就是叫不准打表 0。0)!
Input
一个正整数n.
Output
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一...星期五的次数.
Sample Input
20
Sample Output
36 33 34 33 35 35 34
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int judge(int y)///判断闰年还是平年 6 { 7 if((y%400==0)||(y%4==0&&y%100!=0)) 8 { 9 return 1; 10 } 11 else 12 { 13 return 0; 14 } 15 } 16 int main() 17 { 18 int n,days,x,i,j; 19 int m[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31}; 20 int ans[8]={0}; 21 scanf("%d",&n); 22 days=13; 23 for(i=1900; i<1900+n; i++) 24 { 25 if(judge(i)) 26 { 27 for(j=1; j<=12; j++) 28 { 29 30 if(j==2)///闰年2月29天 31 { 32 x=days%7; 33 days+=m[j]+1;///需要多加上一天 34 ans[x]++; 35 36 } 37 else 38 { 39 40 x=days%7; 41 days+=m[j]; 42 ans[x]++; 43 } 44 } 45 46 } 47 else///平年 48 { 49 for(j=1; j<=12; j++) 50 { 51 52 x=days%7; 53 days+=m[j]; 54 ans[x]++; 55 } 56 } 57 } 58 printf("%d %d %d %d %d %d %d ",ans[6],ans[0],ans[1],ans[2],ans[3],ans[4],ans[5]); 59 return 0; 60 }