[Project Euler] Problem 19

來源:互聯網
上載者:User

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)?

 

 

這道題,一開始讀題誤解了意思,浪費了不少時間。注意要求解的是21世紀裡有多少個星期天發生在一個月的第一天。

 

開始自己沒用庫類,活生生的寫出了下面的代碼:

def yearbeginweek(year):    """ Function to calculate the week of the first day in a year"""    yearrange = range(1900, year)    days = 0    for x in yearrange:        if x in leapyears:            days = days + 366        else:            days = days + 365    return  1 + days % 7 week = {1: "Mon", 2: "Tue", 3: "Wen", 4: "Thr", 5: "Fri", 6: "Sat", 7: "Sun"}years = range(1900, 2001)leapyears = [x for x in years if (x % 4 == 0 and x % 100 != 0) or (x % 100 == 0 and x % 400 == 0)]nonleapyears = [x for x in years if not x in leapyears]leapdays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30]nonleapdays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]suncount = 0for year in range(1901, 2001):    # Calculate the first week day in the year    begin = yearbeginweek(year)    if begin == 7:        suncount += 1        begin = 0    # If it is a leap year    if year in leapyears:        for days in leapdays:            if (begin + days % 7) % 7 == 0:                suncount += 1            begin = (begin + days % 7) % 7    else:        for days in nonleapdays:            if (begin + days % 7) % 7 == 0:                suncount += 1            begin = (begin + days % 7) % 7print suncount            

這個比較囧,後來看了有個Datetime module,一句話就可以解決這個問題了:

import datetimeprint len([datetime.date(year, month, 1) for year in range(1901, 2001) for month in range(1, 13) if datetime.date(year, month, 1).weekday() == 6])

這不得不佩服python的類庫實在強大。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.