1.题目
本题在于理清题意,如何排除掉重复的部分(如3和5和8在列表当中,3的递推过程为3,5,8,4,2,1 所以如果用例中存在5,8,4,2,1这些数,它们的递推过程都已经包括在内了,就可以移除掉了)
2.代码如下
"""
输入:
6
3 5 6 7 8 11
输出:
7 6
"""
n = int(input()) # 获取n个测试用例(我当前的做法中没用到n,但是按要求需要接收)
inp = list(map(int, input().split())) # 将输入用例按空格拆分转换成int类型存到列表中最后赋值给lst
copy_inp = inp.copy() # 复制一份存放输入用例的列表(不可以直接==一个新的列表,因为地址会指向同一个地址)
for i in inp: # 循环输入用例
while i != 1: # 直到i==1时才能结束
if i % 2 == 0: # 如果是偶数
i = i/2 # 就变成当前数的一半
elif i % 2 == 1: # 如果是奇数
i = (3*i+1)/2 # 就乘3加1后再变成一半
if i in copy_inp: # 如果演变过程中的数在输入列表中
copy_inp.remove(i) # 就移除掉这个数(见上方红字)
copy_inp = sorted(copy_inp, reverse=True) # sorted默认从小到大排列列表,之后再设置reverse=True倒叙从大到小排列
print(' '.join(map(str, copy_inp))) # 将列表当中的元素转换成str类型再用空格连接
# {3: [5.0, 8.0, 4.0, 2.0, 1.0],
# 5: [8.0, 4.0, 2.0, 1.0],
# 6: [3.0, 5.0, 8.0, 4.0, 2.0, 1.0],
# 7: [11.0, 17.0, 26.0, 13.0, 20.0, 10.0, 5.0, 8.0, 4.0, 2.0, 1.0],
# 8: [4.0, 2.0, 1.0],
# 11: [17.0, 26.0, 13.0, 20.0, 10.0, 5.0, 8.0, 4.0, 2.0, 1.0]}