蓝桥杯真题—跑步锻炼 Python (常规解法、及调用datetime库函数方法)

题目描述:

小蓝每天都锻炼身体。
正常情况下,小蓝每天跑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-12020-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)

结果

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值