历届填空题:
1.15届
随着2024 年的钟声回荡,传说中的时空之门再次敞开。这扇门是一条神秘的通道,它连接着二进制和四进制两个不同的数码领域,等待着勇者们的探索。
在二进制的领域里,勇者的力量被转换成了力量数值的二进制表示中各数位之和。
在四进制的领域里,力量的转换规则相似,变成了力量数值的四进制表示中各数位之和。
穿越这扇时空之门的条件是严苛的:当且仅当勇者在二进制领域的力量等同于四进制领域的力量时,他才能够成功地穿越。
国王选定了小蓝作为领路人,带领着力量值从 1 到 2024 的勇者们踏上了这段探索未知的旅程。作为小蓝的助手,你的任务是帮助小蓝计算出,在这 2024 位勇者中,有多少人符合穿越时空之门的条件。
代码:
def main():# 请在此处编写代码def convert_two(n):sum=0while(n>0):a=n%2sum+=an=n//2return sumdef convert_four(n):sum=0while(n>0):a=n%4sum+=an=n//4return sumcount=0for i in range(1,2025):if(convert_four(i)==convert_two(i)):count+=1print(count)if __name__ == "__main__":main()
2.
小蓝想要构造出一个长度为 10000 的数字字符串,有以下要求:小蓝不喜欢数字 0,所以数字字符串中不可以出现 0;小蓝喜欢数字 3 和 7,所以数字字符串中必须要有 3 和 7 这两个数字。
请问满足题意的数字字符串有多少个?这个数字会很大,你只需要输出其对 10 ^9+7 取余后的结果。
代码:
def main():# 请在此处编写代码M=1000000000+7a=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=0count2=0count3=0result=0for i in range(len(a)):if a[i]=='2':count1+=1if a[i]=='0':if(count1>0):count2+=1if a[i]=='2':if(count2>0):count3+=1if a[i]=='3':if(count3>0):result=1return resultcount = 0for i in range(12345678, 98765433):if (include_2023(i) == 1):count += 1print(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]*5000ans=0for i in range(1,2024):a[i-1]=ifor i in range(2,5000):count=0for j in range(1,i//2+1):k=i-jif k==j:count+=a[j]//2else: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+=iprint(str)
if __name__ == "__main__":main()
def main():# 请在此处编写代码print(2022040920220409)
if __name__ == "__main__":main()