トピック:
答え:
アイデア:
- まず 365 日または 366 日を足し、次に 12 を足し、それぞれの数字 1 を足します。まずは毎日1KMしか走らないものとして扱いましょう。
- 次に、1 年に月曜日が何回あるかを数えます。
- 次に、各月の 1 日を使用して、月曜日であるかどうかを判断します。月曜日である場合は、1 を減算します。これは、最初のステップが 1 日に 2KMl を実行するようにすでに計算されており、2 番目のステップが繰り返されて 1KM が追加されるためです。
- プログラムは 2020 年 12 月 31 日までに計算されるため、追加のランは差し引く必要があります。
result = 0
dict_run = [31,29,31,30,31,30,31,31,30,31,30,31]
dict_ping = [31,28,31,30,31,30,31,31,30,31,30,31]
for i in range(2000,2021):
#闰年处理
if (i % 4 ==0 and i % 100 != 0) or i % 400 == 0:
result += 378
for x in range(1,367):
xingqi_yi = ((i-1)*365 + i // 4 - i // 100 + i // 400 + x) % 7
if xingqi_yi == 1:
result += 1
day = 1
for j in range(12):
#计算每月一号是不是星期一
xingqi = ((i-1)*365 + i // 4 - i // 100 + i // 400 + day) % 7
day += dict_run[j]
if xingqi == 1:
result -= 1
#平年处理
else:
result += 377
for x in range(1, 366):
xingqi_yi = ((i - 1) * 365 + i // 4 - i // 100 + i // 400 + x) % 7
if xingqi_yi == 1:
result += 1
day = 1
for j in range(12):
# 计算每月一号是不是星期一
xingqi = ((i - 1) * 365 + i // 4 - i // 100 + i // 400 + day) % 7
day += dict_ping[j]
if xingqi == 1:
result -= 1
print(result-106)