PAT-B 1005. 继续(3n+1)猜想(python)

本文介绍了一种通过构建链表来寻找一系列整数中的"关键数"的方法。该算法首先将每个输入数字及其能够覆盖的所有数值存入链表,然后逐一检查每个原始输入数是否存在于任一链表中。如果不存在,则该数被视为关键数并输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把输入中的每个数能"cover的数"分别存在对应的链表里;

然后开始枚举输入中的每个数,看它是否在某条链表中(是否被某个数cover);若找不到这样的链表,说明它不被cover, 即为关键数。


1. str的split方法

2. list的extend增加一个或多个元素

3. list的append增加一个元素

4. list.sort默认从小到大排序,list.sort(reverse = True)从大到小排序

5. list的in方法


if __name__ == "__main__" :
    k = input()
    tmp = raw_input().split(' ') # split, extend, append
    num = []
    
    for i in range(k) :
        num.append(int(tmp[i]))

    num.sort(reverse = True)
    num_list = []
    ans = []
    
    for i in num :
        tmp_list = []
        while i != 1 :
            if i % 2 == 0 :
                i = i / 2
            else :
                i = (i * 3 + 1) / 2
            tmp_list.append(i)
        num_list.append(tmp_list)

    for i in num :
        no_find = True
        for j in num_list :
            if i in j :
                no_find = False
                break
        if no_find == True :
            ans.append(i)

    for i in ans :
        print i,



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值