题目描述:
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑1千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑2千米。如果同时是周一或月初,小蓝也是跑2千米。
小蓝跑步已经坚持了很长时间,从2000年1月1日周六(含)到2020年10月1日周四(含)。请问这段时间小蓝总共跑步多少千米?
解析:
小蓝每天要跑 1 km,遇到周一或者月初(1号)就多跑 1 km,既是周一又是1号也是只多跑 1 km,因此考虑统计出周一和1号,计算出多跑的 km 数。用一个变量 start 表示出每个月1号是星期几,同时将每个月的第一周舍弃,因为这一周是残缺的(<= 7),并且无论这一周出没出现周一也都只会多跑 1 km,然后统计这个月剩下的天数有多少个星期一即多跑多少km, 同时将每个月的天数(每天固定跑 1 km)加上。
代码1:
months = [0,31,28,31,30,31,30,31,31,30,31,30,31]
months2 = [0,31,29,31,30,31,30,31,31,30,31,30,31]
y = 2000
m = 1
d = 1
week = 6
cnt = 0
while y!=2020 or m !=10 or d!=1:
if y%4==0:
if week ==1 or d==1:
cnt+=2
else:
cnt+=1
d+=1
week = (week+1)%7
if d == months2[m]+1:
m+=1
d=1
if m==13:
m = 1
y+=1
else:
if week ==1 or d==1:
cnt+=2
else:
cnt+=1
d+=1
week = (week+1)%7
if d == months[m]+1:
m+=1
d=1
if m==13:
m = 1
y+=1
cnt +=2
print(cnt)
代码2:
import datetime
# weeks=datetime.datetime(2022,2,28).strftime("%w")
# print (weeks=='1')
months = [0,31,28,31,30,31,30,31,31,30,31,30,31]
months2 = [0,31,29,31,30,31,30,31,31,30,31,30,31]
cnt = 0
# 2000-1-1 到 2020-10-1
for i in range(2000,2020):
if i%4==0:
for j in range(1,13):
for day in range(1,months2[j]+1):
cnt+=1
if day==1 or datetime.datetime(i,j,day).strftime("%w")=='1':
cnt+=1
else:
for j in range(1,13):
for day in range(1,months[j]+1):
cnt+=1
if day==1 or datetime.datetime(i,j,day).strftime("%w")=='1':
cnt+=1
# 再加2020年的
for j in range(1,10):
for day in range(1,months2[j]+1):
cnt+=1
if day==1 or datetime.datetime(2020,j,day).strftime("%w")=='1':
cnt+=1
cnt+=2
print(cnt)