首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Collatz序列

Collatz序列
EN

Stack Overflow用户
提问于 2014-11-06 19:55:50
回答 5查看 882关注 0票数 1

如何将整数作为输入,其输出将是该数字后面的Collatz序列。此序列由下列规则计算:

  • 如果n是偶数,则下一个数是n/2
  • 如果n是奇数,则下一个数是3n + 1

例如,从11开始

代码语言:javascript
复制
11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

这是我现在的代码:

代码语言:javascript
复制
n = int(raw_input('insert a random number'))

while n > 1:
    if n%2 == 0:
        n_add = [n/2]
        collatz = [] + n_add
    else:
        n_add2 = [3*n + 1]
        collatz = [] + n_add2 
        print collatz

如果我执行这个并插入一个数字,什么都不会发生。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-06 20:01:32

你永远不会改变数字n,所以每次都是一样的。只有当数字是奇数时,你才会打印。此外,方括号[]表示数组--我不确定您的目标是什么。我可能会这样改写它:

代码语言:javascript
复制
n = int(raw_input('insert a random number'))

while n > 1:
    if n%2 == 0:
        n = n/2
    else:
        n = 3*n + 1
    print n

你可能想花点时间来比较和对比一下我和你的指令所做的事情--这几乎是字面上的逐字翻译(除了print )。

您的代码中有些不清楚是希望在它们出来时将它们打印出来,还是希望收集它们,并在最后打印出来。

票数 1
EN

Stack Overflow用户

发布于 2014-11-06 20:34:38

您每次都应该修改n,这将实现您想要的结果:

代码语言:javascript
复制
n = int(raw_input('insert a random number'))   
while n > 1:
    n = n / 2 if not n & 1 else 3 * n + 1 # if  last bit is not set to 1(number is odd) 
    print n

## -- End pasted text --
insert a random number11
34
17
52
26
13
40
20
10
5
16
8
4
2
1

使用您自己的代码只打印出每个n:

代码语言:javascript
复制
n = int(raw_input('insert a random number'))

while n > 1:
    if n % 2 == 0:
        n = n / 2
    else:
        n = 3 * n + 1
    print n

或者把所有的东西都列在一张单子上,最后打印出来:

代码语言:javascript
复制
all_seq = []
while n > 1:
    if n % 2 == 0:
        n = n / 2
    else:
        n = 3 * n + 1
    all_seq.append(n)
print(all_seq)
票数 1
EN

Stack Overflow用户

发布于 2016-02-17 19:34:17

代码语言:javascript
复制
def collatz(number):
    while number != 1:
        if number % 2 == 0:
            number = number // 2
            print(number)

        elif number % 2 == 1:
            number = number * 3 + 1
            print(number)

try:
    num = int(input('Please pick any whole number to see the Collatz Sequence in action.\n'))
    collatz(num)
except ValueError:
    print('Please use whole numbers only.')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26788266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档