PAT 乙级 1005 继续(3n+1)猜想 python

#思路 将每个输入值的卡拉兹值 作为一个字符串,然后字符串之间进行对比,得出需要的结果
num = int(input())
input_n =(input().split()) #按空格拆分输入内容
list_n = []
n_change = []
all_nchange = []
for i in range(num):
    list_n.append(int(input_n[i])) #将拆分后的字符串 转化为int类 放入该表

for i in range(num):
    n_str = str(list_n[i])
    n = list_n[i]
    while n != 1:
        if n % 2 == 0:
            n =(n // 2)   #2个数相除总是浮点型,即便2个都是int类型。若想整除,则使用  //  运算符
        else:
            n =(3 * n + 1)//2
        n_str+=str(n)    #每个值 所得到的全部卡拉兹值n 合为一个字符串
    all_nchange.append(n_str)   #将每个值的字符串 放入该表

put_list = []
for i in range(num):
    for x in all_nchange:
        if (all_nchange[i] in x) and (not all_nchange[i] == x ):   #对比字符串(前者在后者中包含,且两者不等)
            result = False
            break
        else:
            result = True
    if result == True:
        put_list.append(list_n[i])  #将符合的值放入该表

put_list.sort(reverse=True)
put = ''
for j in put_list:
    put +=' '+str(j)  #将上述表内容转化为字符串(每个值中间加空格)
print(put.strip()) #输出字符串(去除首位空格)
参照博主 zjw_python的代码  在其基础上做了些自己容易理解的更改
博主链接http://blog.csdn.net/zjw_python/article/details/62434123
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值