目录
穿越时空之门
问题描述
随着 20242024 年的钟声回荡,传说中的时空之门再次敞开。这扇门是一条神秘的通道,它连接着二进制和四进制两个不同的数码领域,等待着勇者们的探索。
在二进制的领域里,勇者的力量被转换成了力量数值的二进制表示中各数位之和。
在四进制的领域里,力量的转换规则相似,变成了力量数值的四进制表示中各数位之和。
穿越这扇时空之门的条件是严苛的:当且仅当勇者在二进制领域的力量等同于四进制领域的力量时,他才能够成功地穿越。
国王选定了小蓝作为领路人,带领着力量值从 11 到 20242024 的勇者们踏上了这段探索未知的旅程。作为小蓝的助手,你的任务是帮助小蓝计算出,在这 20242024 位勇者中,有多少人符合穿越时空之门的条件。
解析
我们可以联想一下在计算机组成原理或者是c语言课程里面讲过的进制转化,题目给我们一个十进制,如果要转化为二进制,可以不断除以二,有余数则写1,没有就写0,最后得到二进制结果
如图,同理,转化为4进制也是如此
对于5来说,二进制为101,各位数之和怎么求呢
可以先让5%2,结果为1,然后5//2后变为2,2%2结果为0,然后2//2结果为1,1%2结果为1
最后将三个结果相加得到2
对于4进制来说也是同理,将%和//变为16即可,由此得到解题思路
题解
import os
import sys
# 请在此输入您的代码
#二进制的各位数之和要与四进制各位数之和相等就能穿越时空之门
#对于5来说,二进制为101,各位数之和怎么求呢
#可以先让5%2,结果为1,然后5//2后变为2,2%2结果为0,然后2//2结果为1,1%2结果为1
#最后将三个结果相加得到2
#对于4进制来说也是同理,将%和//变为16即可
def check(n2):
n4 = n2
n2sum = 0
n4sum = 0
#计算二进制各位数之和
while n2:
n2sum = n2sum + n2 % 2
n2 = n2 // 2
#计算四进制各位数之和
while n4:
n4sum = n4sum + n4 % 4
n4 = n4 // 4
#判断
if n2sum == n4sum:
return 1
else:
return 0
sum = 0
for i in range(1, 2025):
if check(i):
sum += 1
print(sum)
最后答案为63