引言
在蓝桥杯中几乎每年都会遇到与举办当天日期相关的题目,而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)