「CODEVS1384」黑色星期五
题目描述
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年是闰年.
请不要预先算好数据!
输入
一个整数n。
输出
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一…..星期五的次数。
样例输入
20
样例输出
36 33 34 33 35 35 34
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include<iostream> using namespace std; int get(int y,int m) { int i; if((y%4==0&&y%100!=0)||(y%400==0)) i=1; else i=0; if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) return 31; else if (m==2) { if(i==1) return 29; else return 28; } return 30; } int main() { int n,a[7]={0},week=6;cin>>n; for(int i=1900;i<=1900+n-1;i++) for(int j=1;j<=12;j++) { a[week%7]++; week+=get(i,j); } cout<<a[6]<<" "<<a[0]<<" "; for(int i=1;i<=5;i++) cout<<a[i]<<" "; return 0; } |
好厉害!!!