PAT 1005 继续(3n+1)猜想Python实现

1 篇文章 0 订阅
1 篇文章 0 订阅

原题链接

        对于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)//2
            else:
                i=i//2
            if 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=' ')

这题也可以使用函数和集合,本人新人一枚,当然有什么问题或疑惑也欢迎指出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心雨\星愿^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值