蓝桥杯 python 特殊日期(哈希表)(day8)

题目描述

对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 11 月 11 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。

例如,2022 年 11 月 13 日满足要求,因为 2+0+2+2=(1+1)+(1+3) 。

请提交满足条件的日期的总数量。

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

代码

#判断闰年
def isleap(x):
    if(x%4==0 and x%100!=0)or x%400==0:
        return True
    return False

#计算年,月,日位数和累加的函数
def numadd(x):
    sums=0
    while x:
        sums+=x%10
        x//=10
    return sums
#day表示每一个月与30的差值
day=[1,-2,1,0,1,0,1,1,0,1,0,1]
#data是用来存放日的位数和
data=[]
ans=0
hstable=dict()
#遍历每一年里 月和日的位数累加
for j in range(1,32):
    data.append(numadd(j))
for i in range(1,13):
    t=numadd(i)
    for j in range(day[i-1]+30):
        addt=t+data[j]
    
#用哈希表储存月和日位数和以及和的天数
        if addt not in hstable:
            hstable[addt]=1
        else:
            hstable[addt]+=1

#计算年的位数和
for i in range(2024,2025):
    yearsum=numadd(i)
#如果年的位数在哈希表中,将将天数相加
    if yearsum in hstable:
        ans+=hstable[yearsum]
    if isleap(i)and yearsum==13:
        ans+=1
print(ans)

核心思想

用哈希表储存月和日的位数之和以及和的天数,当然我这个代码是算的2024 年满足条件的天数,你可以修改成任意年的,注意闰年的判断,最后闰年2月29日的位数和是13。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值