python上机题:黑色星期五

题目描述

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<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;
}
发布了392 篇原创文章 · 获赞 487 · 访问量 239万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览