美文网首页
2017/7/30 Collatz conjecture

2017/7/30 Collatz conjecture

作者: 终焉的灰烬 | 来源:发表于2017-07-30 21:58 被阅读0次

    原题:

    编写一个名为collatz()的函数,它有一个名为number 的参数。如果参数是偶数,那么collatz()就打印出number // 2,并返回该值。如果number 是奇数,collatz()就打印并返回3 * number + 1。
    然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。

    先来看看wiki上对Collatz 序列的描述

    Take any positive integer n. If n is even, divide it by 2 to get n / 2. If n is odd, multiply it by 3 and add 1 to obtain 3n + 1. Repeat the process indefinitely. The conjecture is that no matter what number you start with, you will always eventually reach 1.

    也就是说实际上,我们的限制条件需为正整数

    答案如下:

    #!/usr/bin/env python
    # coding=utf-8
    
    import sys
    def collatz(number):
        if number % 2 == 0:
            return number // 2
        else:
            return 3 * number + 1
    
    if __name__ == '__main__':
        number =input('Enter positive number: ')
        try:
            number = int(number)
            if number > 0:
                while True:
                    if number != 1 :
                        print(collatz(number))
                        number = collatz(number)
                    else:
                        break
            else:
                print('you need input positive number.')
        except:
            print('you need input positive number.')
    

    随便测试几个数

    C:\python\learn07>python collatz.py
    Enter positive number: 99
    298
    149
    448
    224
    112
    56
    28
    14
    7
    22
    11
    34
    17
    52
    26
    13
    40
    20
    10
    5
    16
    8
    4
    2
    1
    
    C:\python\learn07>python collatz.py
    Enter positive number: 1
    
    C:\python\learn07>python collatz.py
    Enter positive number: 0
    you need input positive number.
    
    C:\python\learn07>python collatz.py
    Enter positive number: -8
    you need input positive number.
    
    C:\python\learn07>python collatz.py
    Enter positive number: 8sd
    you need input positive number.
    

    相关文章

      网友评论

          本文标题:2017/7/30 Collatz conjecture

          本文链接:https://www.haomeiwen.com/subject/ofwklxtx.html