原题链接
对于Python初学者而言,这题完全可以采用列表的方法去做,基本思路如下:
1:我们可以对输入的每一个数通过卡拉兹猜想(PAT1001)进行运算,将运算出来的每一个结果保存在同一个空列表中。
2:如果输入的某个数字已经存在于列表中,则该数字已经被覆盖,直接跳过。同样的,如果该数字运算过程中的某个数字已存在与列表中,则后面的数字都被覆盖,直接退出循环。
3:完成运算操作后,未被覆盖的数字将不会被保存在列表中,在用一个循环遍历输入的数字,找到未被覆盖的数字保存在一个新的列表answer中。
4:最后通过sorted函数进行降序排序后输出,输出时用星号拆解,以确保行末无空格。
代码如下:
n = int(input())
l = list(map(int, input().split()))
k = []
answer = []
for i in l:if i not in k:while i!=1:if i%2!=0:i=(i*3+1)//2else:i=i//2if i not in k:k.append(i)else:break
for i in l:if i not in k:answer.append(i)
print(*sorted(answer,reverse=True), sep=' ')
这题也可以使用函数和集合,本人新人一枚,当然有什么问题或疑惑也欢迎指出。