语言是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