Python3 PAT (Basic Level) 【乙级】 - 1005 继续(3n+1)猜想

原题链接

解体思路:这一题非常适合用集合运算来做,设我们一开始输入的数字集合为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])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值