Python练习题 046:Project Euler 019:每月1日是星期天

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python练习题 046:Project Euler 019:每月1日是星期天相关的知识,希望对你有一定的参考价值。

本题来自 Project Euler 第19题:https://projecteuler.net/problem=19

‘‘‘
How many Sundays fell on the first of the month
during the twentieth century (1 Jan 1901 to 31 Dec 2000)?

Answer: 171
‘‘‘

from datetime import *

firstDay = date(1901,1,1)
lastDay = date(2000,12,31)

delta1 = timedelta(days=1)
firstSunday = date(1900,1,1)
while firstSunday == date(1900,1,1):
    if firstDay.isoweekday() == 7:
        firstSunday = firstDay  #找出第1个星期天
        break
    else:
        firstDay += delta1

delta7 = timedelta(days=7)
sundayCount = 0  #星期天的数量
while firstSunday <= lastDay:
    if firstSunday.day == 1:  #若为每月的1日
        sundayCount += 1
    firstSunday += delta7  #7天7天递增
print(sundayCount)

好吧,欧拉计划第18题做不出来,先跳过,先做第19题吧。

这题思路挺简单:在区间之内,先找出第1个星期天,然后7天7天地找,只要是每月的第1天,计数器就加1,很快就有答案。

话说,Python好像不能像MySQL那样,直接拿一个日期加上数字n,计算n天之后的日期;而是得借助timedelta,设定间隔时间,再进行运算,感觉……挺麻烦的。不过,用isoweekday()直接判断星期几、用day()直接判断是每月的第几天,倒是挺方便的~~~

以上是关于Python练习题 046:Project Euler 019:每月1日是星期天的主要内容,如果未能解决你的问题,请参考以下文章

Python练习题 047:Project Euler 020:阶乘结果各数字之和

Python练习题 041:Project Euler 013:求和取前10位数值

Python练习题 042:Project Euler 014:最长的考拉兹序列

Python练习题 038:Project Euler 010:两百万以内所有素数之和

Python练习题 048:Project Euler 021:10000以内所有亲和数之和

Python练习题 034:Project Euler 006:和平方与平方和之差