题目描述
对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 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。