48# Collatz Sequence 科拉茨序列

本文详细介绍了科拉茨序列的计算方法,通过遍历循环和条件判断,计算从任意正整数到达1所需的操作步数。提供了两种实现方式,包括直接循环计算和使用自定义函数处理。

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

问题描述

科拉茨序列描述:我们可以选定一个初始数X并以下列规则进行延续排列,直到数为1

if X is even (i.e. X modulo 2 = 0) then
    Xnext = X / 2
else
    Xnext = 3 * X + 1

例如15以下列顺序排列

15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1

目的:计算结果到1所需要的步数
输入数:第一行包含总共数的个数
第二行含需要被计算的数
输出:各个数计算到1所需的步数。
例:

input data:
3
2 15 97

answer:
1 17 118

问题解决

解题思路

第一步:第一行包含总共数的个数, 第二行含需要被计算的数
第二步:对第二行所有数进行第三步遍历循环
第三步:判断数是否为1,是1退出循环,并将次数加入结果列表,否进行第四步
第四步:判断是否为偶数,偶数/2,奇数*3+1,并且count+1,完成后进行第三步判断。
4输出结果列表

代码

lineInput=input()
lineInput2=list(map(int,input().split()))
result=[]
for i in range(int(lineInput)):
    count=0
    while lineInput2[i]!=1:
        if lineInput2[i]%2==0: 
            lineInput2[i] /=2 
            count+=1  
        else:
            lineInput2[i]=lineInput2[i]*3+1
            count+=1
    result.append(count)
print(*result

方法二

def collatz_sequence():
    def cs(number):
        n = float(number)
        steps = 0
        while n != 1:
            if n % 2 == 0:
                n = n / 2
            else:
                n = 3 * n + 1
            steps += 1
        return steps

    seq = raw_input("Enter number sequence: ").split()
    seq = [str(cs(float(x))) for x in seq]

    return " ".join(seq)

seq = [str(cs(float(x))) for x in seq]
这一行有学习意义,对列表中每个元素遍历循环并使用函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值