题目描述
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
代码
#coding:utf-8
def get(y,m):
if((y%4==0 and y%100!=0) or (y%400==0)):
i=1
else:
i=0
if(m==1 or m==3 or m==5 or m==7 or m==8 or m==10 or m==12):
return 31
elif m==2:
if(i==1):
return 29
else:
return 28
return 30
# 输入n,限定范围.注意转化为int类型
n = int(input())
while n<0 or n>400:
n = input()
a= [0 for i in range(7)]
week=6
for i in range(1900,1900+n):
for j in range(1,13):
a[week%7]+=1
week+=get(i,j)
print(str(a[6])+" "+str(a[0]))
for i in range(1,6):
print(str(a[i])+" ")
C++
#include
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<
for(int i=1;i<=5;i++)
cout<