历届填空题:
1.15届
随着2024 年的钟声回荡,传说中的时空之门再次敞开。这扇门是一条神秘的通道,它连接着二进制和四进制两个不同的数码领域,等待着勇者们的探索。
在二进制的领域里,勇者的力量被转换成了力量数值的二进制表示中各数位之和。
在四进制的领域里,力量的转换规则相似,变成了力量数值的四进制表示中各数位之和。
穿越这扇时空之门的条件是严苛的:当且仅当勇者在二进制领域的力量等同于四进制领域的力量时,他才能够成功地穿越。
国王选定了小蓝作为领路人,带领着力量值从 1 到 2024 的勇者们踏上了这段探索未知的旅程。作为小蓝的助手,你的任务是帮助小蓝计算出,在这 2024 位勇者中,有多少人符合穿越时空之门的条件。
代码:
def main():
# 请在此处编写代码
def convert_two(n):
sum=0
while(n>0):
a=n%2
sum+=a
n=n//2
return sum
def convert_four(n):
sum=0
while(n>0):
a=n%4
sum+=a
n=n//4
return sum
count=0
for i in range(1,2025):
if(convert_four(i)==convert_two(i)):
count+=1
print(count)
if __name__ == "__main__":
main()
2.
小蓝想要构造出一个长度为 10000 的数字字符串,有以下要求:小蓝不喜欢数字 0,所以数字字符串中不可以出现 0;小蓝喜欢数字 3 和 7,所以数字字符串中必须要有 3 和 7 这两个数字。
请问满足题意的数字字符串有多少个?这个数字会很大,你只需要输出其对 10 ^9+7 取余后的结果。
代码:
def main():
# 请在此处编写代码
M=1000000000+7
a=pow(9,10000,M)
b=2*pow(8,10000,M)
c=pow(7,10000,M)
print((a-b+c)%M)
if __name__ == "__main__":
main()
14届:
1.
思路:我们把数字转为字符串,然后按顺序统计‘2’,‘0’,‘2’,‘3’分别出现的次数,如果先遇到了2,那么count1++,如果遇到了0,前面如果有2,说明count1>0,那么此时的0才有可能构成20,所以如果遇到的是0且前面已经有了2,那么count2++,以此类推,如果再次遇到2,如果count2>0说明已经有202了,就很有可能构成2023,那么count3++,如果遇到3,前面count3>0,就可以构成2023了,我们统计出所有能构成2023的数字后,记得相减,代码超时,运行出来结果正确。
代码:
def main():
# 请在此处编写代码
def include_2023(n):
a=list(str(n))
count1=0
count2=0
count3=0
result=0
for i in range(len(a)):
if a[i]=='2':
count1+=1
if a[i]=='0':
if(count1>0):
count2+=1
if a[i]=='2':
if(count2>0):
count3+=1
if a[i]=='3':
if(count3>0):
result=1
return result
count = 0
for i in range(12345678, 98765433):
if (include_2023(i) == 1):
count += 1
print(98765433 - 12345678 - count)
if __name__ == "__main__":
main()
提交:
def main():
# 请在此处编写代码
print(85959030)
if __name__ == "__main__":
main()
2.
先理解一下题目:一共有2023种不同面值的硬币,所以面值就是1-2023;第i种硬币面值为i,数量也为i;也就是面值为1的硬币有一个,面值为2的硬币有2个,以此类推,面值为2023的硬币有2023个;硬币是两两兑换,所以可兑换的面值是2-4046;我们从2遍历到4046,记录每个面值被兑换的个数,取最大值,在兑换过程中,总面值由两个面值 j 和 k 构成,j+k=i;所以j<=i//2,如果j==k,说明两个面值相同,那么一次兑换个数就是之前兑换的加上a[j]//2(也就是j的个数,因为j与k相同,所以把j消耗完也就兑换完了。如果不相同,那兑换个数就是最少的面值数目,最后总数目等于count+原来就有的面值数a[i]
代码:
def main():
# 请在此处编写代码
a=[0]*5000
ans=0
for i in range(1,2024):
a[i-1]=i
for i in range(2,5000):
count=0
for j in range(1,i//2+1):
k=i-j
if k==j:
count+=a[j]//2
else:
count+=min(a[j],a[k])
count+=a[i]
ans=max(ans,count)
print(ans)
if __name__ == "__main__":
main()
13届:
代码:
def main():
# 请在此处编写代码
n=input()
a=list(n)
b=sorted(a)
str=''
for i in b:
str+=i
print(str)
if __name__ == "__main__":
main()
def main():
# 请在此处编写代码
print(2022040920220409)
if __name__ == "__main__":
main()