题目描述
13 号又是一个星期五,那么 13号在星期五比在其他日子少吗?
为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数。给出 n 年的一个周期,要求计算 1900 年 1 月 1 日至 1900+n-1 年 12 月 31 日中十三号落在周一到周日的次数。
这里有一些你要知道的:
1、1900 年 1 月 1 日是星期一。
2、4,6,11 和 9 月有 30 天,其他月份除了 2 月都有 31 天,闰年 2 月有 29 天,平年 2 月有 28 天。
3、年份可以被 4 整除的为闰年 ( 1992=4*498 所以 1992 年是闰年,但是 1990 年不是闰年 )。
4、以上规则不适合于世纪年。可以被 400 整除的世纪年为闰年,否则为平年。所以,1700,1800,1900,2100 年是平年,而 2000 年是闰年。
输入格式
一个正整数 n。
输出格式
依次输出周六、日、一、二、三、四、五在 13 日出现的次数。
输入输出样例
输入 #1
20
输出 #1
36 33 34 33 35 35 34
这道题可以说是python的大胜利,当其他语言还在苦苦冥想怎么算的时候,我们直接导入时间模块对题进行暴力破解 运算,主要用到的就是datetime里的date和timedelta
代码如下:
import datetime # 导入时间模块之一
n = int(input())
t1 = datetime.date(1900, 1, 1) # 日期格式年 月 日
t2 = datetime.date(1900 + n - 1, 12, 31)
m = datetime.timedelta(days=1) # 时间间隔1天
lst = [0] * 7 # 统计各星期次数
while t1 <= t2:
t1 += m
if t1.day == 13:
lst[t1.weekday()] += 1
print(f"{lst[5]} {lst[6]} {lst[0]} {lst[1]} {lst[2]} {lst[3]} {lst[4]}")