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

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]}

 3.提交结果 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值