解体思路:这一题非常适合用集合运算来做,设我们一开始输入的数字集合为y,因为通过关键数运算出来的数字所组成的集合x,y-x 即 我们所需要的关键数。
这一题我的各种类型转换,我认为应该是冗余了,希望各位大牛若有更好的解法,务必留言以供学习,非常感谢。
n = int(input())
s = set()
num = set(input().split())
for a in num:
a = int(a)
while a != 1:
if a % 2 == 0:
a = a / 2
s.add(str(int(a)))
#int(a)去掉运算的小数位,
#Str()的转换方便后面集合的差运算,必须保证两个集合中元素类型一致。
else:
a = 3 * a + 1
a = a / 2
s.add(str(int(a)))
result = [int(x) for x in num-s]
result.sort(reverse=True)
for num in range(len(result)):
if num != len(result)-1 :
print(result[num],end=" ")
else:
print(result[num])