https://projecteuler.net/problem=19
Counting Sundays
Problem 19
You are given the following information, but you may prefer to do some research for yourself.
- 1 Jan 1900 was a Monday.
- Thirty days has September,
April, June and November.
All the rest have thirty-one,
Saving February alone,
Which has twenty-eight, rain or shine.
And on leap years, twenty-nine. - A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.
How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
简单化处理,直接从1901年往上加日期,而不是写一个函数,直接计算时间,那样有点麻烦,虽然比较通用,等问题难了的话,再写那个函数吧。
def numMonth():
count = 0
days = 366 - 31 #1900年12月1号
for i in range(1901,2001):
for j in range(1,13):
days += getDays(i,j - 1) #把上个月的天数加上去
if isSunday(days):
count += 1
print(i,j)
return count
def getDays(year,month):
if month in (0,1,3,5,7,8,10): #0代表的是上一年的12月份
return 31
elif month in (4,6,9,11):
return 30
elif year % 400 == 0:
return 29
elif year % 4 == 0:
return 29
else:
return 28
def isSunday(days):
if days % 7 == 0:
return True
else:
return False
print(numMonth())