题目描述 Description
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年是闰年. |
请不要预先算好数据!
输入描述 Input Description
一个整数n.
输出描述 Output Description
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一.....星期五的次数.
样例输入 Sample Input
20
样例输出 Sample Output
36 33 34 33 35 35 34
数据范围及提示 Data Size & Hint
n是一个非负数且不大于400.
分类标签 Tags 点此展开
虽然是青铜的难度,我觉得还是做做好
代码:
#include<cstdio> #include<iostream> using namespace std; int ans[8],n,w; int md[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int main(){ scanf("%d",&n); for(int y=1900;y<=1900+n-1;y++){//枚举年 for(int m=1;m<=12;m++){//枚举月 if((y%4==0&&y%100!=0)||y%400==0)//判断是否是闰年 md[2]=29; else md[2]=28; for(int d=1;d<=md[m];d++){ w++;//记录是星期几 if(w>7) w=1; if(d==13) ans[w]++;//记下每个月的13号是星期几 } } } printf("%d %d %d %d %d %d %d ",ans[6],ans[7],ans[1],ans[2],ans[3],ans[4],ans[5]); return 0; }