Я написал фрагмент кода, который подсчитывает, сколько раз воскресенье выпадает на первое число месяца с января 1901 года по декабрь 2000 года (включительно). Я знаю, что правильный ответ - 171, что на один больше, чем я получаю. Это означает, что либо в логе моего алгоритма c имеется ошибка, либо я неправильно понимаю формулировку проблемы. Я надеялся, что кто-нибудь укажет на мою ошибку в любом случае. Вот формулировка проблемы и мой код:
1 января 1900 года был понедельник. Тридцать дней сентябрь, апрель, июнь и ноябрь. У всех остальных тридцать один, спасительный февраль, в котором двадцать восемь, дождь или сияние. В високосные годы - двадцать девять.
В любой високосный год наступает високосный год, делимый на 4, но не на столетие, если он не делится на 400.
Сколько выпало воскресений первое число месяца в двадцатом веке (с 1 января 1901 по 31 декабря c 2000)?
monthdict = {
1: 31,
2: 28,
3: 31,
4: 30,
5: 31,
6: 30,
7: 31,
8: 31,
9: 30,
10: 31,
11: 30,
12: 31
}
ly_monthdict = {
1: 31,
2: 29,
3: 31,
4: 30,
5: 31,
6: 30,
7: 31,
8: 31,
9: 30,
10: 31,
11: 30,
12: 31
}
leap_year = False
sundays = 0
first_sunday = 6
for year in range(1901, 2001):
if year % 4 == 0 and year % 100 != 0:
leap_year = True
elif year % 100 == 0 and year % 400 == 0:
leap_year = True
else:
leap_year = False
if leap_year:
for month in range(1, 13):
if first_sunday == 1:
sundays += 1
curr_sunday = first_sunday
while curr_sunday < ly_monthdict[month]:
curr_sunday += 7
first_sunday = curr_sunday - ly_monthdict[month]
else:
for month in range(1, 13):
curr_sunday = first_sunday
while curr_sunday < monthdict[month]:
curr_sunday += 7
first_sunday = curr_sunday - monthdict[month]
if first_sunday == 1:
sundays += 1
print(sundays, "Sundays occured on the first of the month")