Les informations suivantes sont données.
Le 1er janvier 1900 est lundi. Septembre, avril, juin et novembre ont jusqu'à 30 jours, et tous les mois sauf février ont jusqu'à 31 jours. Février a 28 jours, mais dans une année étouffante, il est de 29 jours. L'année du gonflement survient dans l'année où le calendrier est divisible par 4. Cependant, l'année où le calendrier n'est pas divisible par 400 et divisible par 100 n'est pas une année de gonflement. Combien de fois le début du mois est-il dimanche au cours du 20e siècle (du 1er janvier 1901 au 31 décembre 2000)? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2019
Dimanche: 0 Lundi: 1 Mardi: 2 Mercredi: 3 Jeudi: 4 Vendredi: 5 Samedi: 6 Et. À partir de la date du premier jour du mois précédent et du nombre de jours du mois précédent, la date suivante du premier jour du mois suivant peut être calculée par la formule suivante. (7 est le nombre de jours). J'ai écrit le code suivant en utilisant ceci.
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:
#Si c'est décembre, passez à l'année suivante
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:
#Date du mois dernier,month,année à la date du mois suivant(journée)Avoir
date = nextdate(date, month, year)
#month,Année incrémentale
(month,year) = nextmonth(month, year)
#l'année est comprise dans la plage et la date est 0(dimanche)Puis ajoutez 1 à ans.
if STARTYEAR <= year <= LASTYEAR and date == 0:
ans += 1
print ans
main()
Recommended Posts