蓝桥杯时间相关题(python的datatime库)

文章目录

  • 引言
  • 1、20年第十一届省赛C题:跑步锻炼
    • 问题描述
    • 代码
  • 2、21年第十二届国赛C题:完全日期
    • 问题描述
    • 代码

引言

在蓝桥杯中几乎每年都会遇到与举办当天日期相关的题目,而python中有自带的时间库datatime库,这时就成了解题利器,要善于利用。

1、20年第十一届省赛C题:跑步锻炼

问题描述

小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 1 千米。
如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑2千米。如果同时是周一或月初,小蓝也是跑2千米。
小蓝跑步已经坚持了很长时间,从2000年1月1日周六(含)到2020年10月1日周四(含)。
请问这段时间小蓝总共跑步多少千米?

代码

import datetime
s = datetime.date(2000,1,1)
e = datetime.date(2020,10,1)
#一天(datetime类型)
d = datetime.timedelta(days=1)
res = 0
while s <= e:
	#月初或周一
    if s.day == 1 or s.weekday() == 0:
        res+=2
    else:
        res += 1
    #逐日判断
    s += d
print(res)
##result:8879

2、21年第十二届国赛C题:完全日期

问题描述

如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。
例如: 2021年6月5日的各位数字之和为2+0+2+1+6+5= 16,而16是一个完全平方数,它是4的平方。所以2021年6月5日是一个完全日期。
例如: 2021年6月23日的各位数字之和为2+0+2+1+6+2+3= 16,是一个完全平方数。所以2021年6月23日也是一个完全日期。

请问,从2001年1月1日到2021年12月31日中,一共有多少个完全日期?

代码

from datetime import *
from math import *
a=date(2001,1,1)
b=date(2021,12,31)
gap=timedelta(days=1)
#求每个数位的和
def cul(n):
    summ=0
    nn=str(n)
    for i in nn:
        summ+=int(i)
    return summ
#判断是否为完全平方数
def judge(mm):
    x=sqrt(mm)
    y=int(sqrt(mm))
    if x==y:
        return 1
    return 0

ans=0
while a!=b:
    a=a+gap
    #获取年月日
    year=a.year
    month=a.month
    day=a.day
    #和
    summm=cul(year)+cul(month)+cul(day)
    if judge(summm):
        ans+=1
        print(a)
print(ans)

你可能感兴趣的:(python学习笔记,算法笔记,蓝桥杯,职场和发展)