牛客-計算機複試題-Day of Week

語言是python。這題應該有一個很簡單的方法,就是用庫,不過我沒去試,是自己推出來的。
在寫這篇博客的時候是2020.3.30,星期一,則得到下表:

2020.3.30 星期一
2020.3.31 星期二
2020.4.1 星期三
2020.4.2 星期四
2020.4.3 星期五
2020.4.4 星期六
2020.4.5 星期日

原理就是,一週只有7天,是循環的,因此我們用上面的表格去推給定的日期是周幾。我們將1000.1.1定爲第1天,寫這篇博客時是2020.3.30,對應的就是第372637天,那麼有下面的表:

2020.3.30 372637
2020.3.31 372638
2020.4.1 372639
2020.4.2 372640
2020.4.3 372641
2020.4.4 372642
2020.4.5 372643

因此,給定一個日期,我們只要算出它是對應第幾天,例如爲k,那麼我們從上面的表中,總能找到一個值d,使得(d-k)%7=0,那麼d對應是周幾,k就對應是周幾。
代碼如下:

def is_round_year(year):
    return year % 4 == 0 and year % 100 != 0 or year % 400 == 0

years = {str(year): 0 for year in range(1000, 3001)}
for year in range(1001, 3001):
        years[str(year)] = years[str(year - 1)] + 365 + (1 if is_round_year(year-1) else 0)
months = {'January': 0, 'February': 31, 'March': 59, 'April': 90, 'May': 120, 'June': 151, 'July': 181,
          'August': 212, 'September': 243, 'October': 273, 'November': 304, 'December': 334}
day = {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Thursday', 4: 'Friday', 5: 'Saturday', 6: 'Sunday'}

today = years['2020'] + months['March'] + 1 + 30
print(today)
while True:
    try:
        date = input().strip().split()
        days = years[date[2]] + months[date[1]] + int(date[0])

        if is_round_year(int(date[2])):
            if date[1] != 'February' and date[1] != 'January':
                days += 1

        for i in range(7):
            delta = abs(today + i - days)
            if delta % 7 == 0:
                print(day[i])
                break
    except:
        break
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章