Die folgenden Informationen werden gegeben.
Der 1. Januar 1900 ist Montag. September, April, Juni und November haben bis zu 30 Tage, und andere Monate außer Februar haben bis zu 31 Tage. Der Februar hat 28 Tage, aber in einem heißen Jahr sind es 29 Tage. Das Jahr der Schwellung tritt in dem Jahr auf, in dem der Kalender durch 4 teilbar ist, aber das Jahr, in dem der Kalender nicht durch 400 teilbar und durch 100 teilbar ist, ist kein Jahr der Schwellung. Wie oft ist der Monatsanfang im 20. Jahrhundert Sonntag (1. Januar 1901 - 31. Dezember 2000)? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2019
Sonntag: 0 Montag: 1 Dienstag: 2 Mittwoch: 3 Donnerstag: 4 Freitag: 5 Samstag: 6 Und. Aus dem Datum des ersten Tages des Vormonats und der Anzahl der Tage des Vormonats kann das nächste Datum des ersten Tages des nächsten Monats nach der folgenden Formel berechnet werden. (7 ist die Anzahl der Tage). Damit habe ich den folgenden Code geschrieben.
nextdate = (date+days) % 7
# -*- coding: utf-8 -*-
def getdays(month, year):
if month in [1,3,5,7,8,10,12]:
return 31
elif month in [4,6,9,11]:
return 30
elif year%400 == 0:
return 29
elif year%100 == 0:
return 28
elif year%4 == 0:
return 29
else:
return 28
def nextdate(date, month, year):
return (date + getdays(month, year)) % 7
def nextmonth(month, year):
if month == 12:
#Wenn es Dezember ist, gehen Sie zum nächsten Jahr
return (1, year+1)
else:
return (month+1, year)
def main():
STARTYEAR = 1901
LASTYEAR = 2000
(date, month, year) = (1, 1, 1900)
ans = 0
while year <= LASTYEAR:
#Datum des letzten Monats,month,Jahr bis zum nächsten Monat Datum(Tag)Erhalten
date = nextdate(date, month, year)
#month,Inkrementelles Jahr
(month,year) = nextmonth(month, year)
#Jahr ist in Reichweite und Datum ist 0(Sonntag)Dann addiere 1 zu ans.
if STARTYEAR <= year <= LASTYEAR and date == 0:
ans += 1
print ans
main()
Recommended Posts