collat​​z算法,当至少输入(n)长度时返回第一个整数

时间:2017-03-17 18:21:24

标签: python algorithm loops

以下是我的指示:

考虑以下过程:从一些正整数开始。如果数字是奇数,则将其乘以3并加1.如果是偶数,则将其除以2.对于每个曾尝试过的数字,重复此过程最终会得到数字1.例如,从6开始我们得到序列6,3,10,5,16,8,4,2,1。这是一个长度为9的序列。

编写一个带有参数n的函数collat​​z,并返回生成的序列长度至少为n的第一个整数。

这是我目前的代码:

def collatz( n ):

    seq = []
    seq.append( n )

    while n > 1:

        if n % 2 != 0:

            n = int( n * 3 ) + 1
            seq.append( n )

        else:

            n = int( n / 2 )
            seq.append( n )

    if len( seq ) < seq[ 0 ]:
        return len( seq )

    else: 

        return seq[ 1 ]

我的当前代码适用于10输入正确输出7,输入6输出3正确输出,但输入3输出10时应输出3。

我对这个问题感到非常困惑,无法解决它甚至问的问题。任何帮助是极大的赞赏!谢谢!

2 个答案:

答案 0 :(得分:2)

我相信要求你做的是:

编写一个带有数字n的函数collat​​z,并返回生成的序列长于n的最小整数。

一些示例输出:

>>>colatz(1)
1
>>>colatz(2)
2
>>>colatz(3)
3
>>>colatz(4)
3
>>>colatz(9)
6

您现在拥有的功能似乎是正确生成给定数字的序列。在那之后,我不认为你回来的东西会在回答这个问题方面取得任何进展。

答案 1 :(得分:2)

&#34;写一个函数collat​​z,它接受一个参数n并返回生成的序列长度至少为n的第一个整数&#34;

因此,您将编写一个函数来查找至少长度为n 的collat​​z序列,并返回它开头的整数。不是以n。

开头的collat​​z序列