#思路 将每个输入值的卡拉兹值 作为一个字符串,然后字符串之间进行对比,得出需要的结果
num = int(input())
input_n =(input().split()) #按空格拆分输入内容
list_n = []
n_change = []
all_nchange = []
for i in range(num):
list_n.append(int(input_n[i])) #将拆分后的字符串 转化为int类 放入该表
for i in range(num):
n_str = str(list_n[i])
n = list_n[i]
while n != 1:
if n % 2 == 0:
n =(n // 2) #2个数相除总是浮点型,即便2个都是int类型。若想整除,则使用 // 运算符
else:
n =(3 * n + 1)//2
n_str+=str(n) #每个值 所得到的全部卡拉兹值n 合为一个字符串
all_nchange.append(n_str) #将每个值的字符串 放入该表
put_list = []
for i in range(num):
for x in all_nchange:
if (all_nchange[i] in x) and (not all_nchange[i] == x ): #对比字符串(前者在后者中包含,且两者不等)
result = False
break
else:
result = True
if result == True:
put_list.append(list_n[i]) #将符合的值放入该表
put_list.sort(reverse=True)
put = ''
for j in put_list:
put +=' '+str(j) #将上述表内容转化为字符串(每个值中间加空格)
print(put.strip()) #输出字符串(去除首位空格)
参照博主
zjw_python的代码 在其基础上做了些自己容易理解的更改
博主链接http://blog.csdn.net/zjw_python/article/details/62434123