2017-06-14 53 views
1

我正在努力解决问题19项目欧拉的Python的while循环,以找到第一个月周日

https://projecteuler.net/problem=19

的目标是要找到倒在第一周日的数量在20世纪的月份。我试图只使用循环来完成问题(不使用日期时间)。

这里是我的代码现在:

days = [] 

yearCnt = 1900; 
dayCnt = 1; 

Jan = 31; 
Mar = 31; 
Apr = 30; 
May = 31; 
Jun = 30; 
Jul = 31; 
Aug = 31; 
Sep = 30; 
Oct = 31; 
Nov = 30; 
Dec = 31; 

while yearCnt < 2001: 
    if yearCnt == 1900: 
     Feb = 28; 
    elif yearCnt%4 == 0: 
     Feb = 29; 
    else: 
     Feb = 28; 
    days.append(1); 
    while dayCnt < Jan: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Feb: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Mar: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Apr: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < May: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Jun: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Jul: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Aug: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Sep: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Oct: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Nov: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    days.append(1); 
    while dayCnt < Dec: 
     days.append(0); 
     dayCnt += 1; 
    dayCnt = 1; 
    yearCnt += 1; 

sunCnt = 6; 

while sunCnt <= len(days): 
    days[sunCnt] += 1; 
    sunCnt += 7; 

print(days.count(2)); 

的想法是创建的所有日子的数组与第一个月的位置标有1秒。然后另一个while循环遍历该数组,并添加1以标记所有星期日。从理论上讲,2的数量应该表示月份的第一个星期日的数量。

它目前给出了答案173.我知道答案是171,但我想知道我要去哪里错了。

+0

您是否独立测试了您的代码,以确定一年是否在二月份有29天? –

+1

你既包括1900年也包括2000年。我认为只有一个属于20世纪。 – chapelo

+2

20世纪开始于1901年,并于2000年结束(包括在内) –

回答

0

它可以工作,如果您更改代码以在1901年1月1日开始计数。您只需在标记每个星期日的末尾更改循环。

sunCnt = 6; 
# Skip the year 1900 
# Adding 364 will get to 1901 without messing up the day of the week 
sunCnt += 364; 

while sunCnt <= len(days): 
    days[sunCnt] += 1; 
    sunCnt += 7;