2017-06-13 70 views
0

我获得了一个分配写考拉兹猜想程序,修改像这样:蟒蛇稍微修改考拉兹猜想程序

  1. 我们知道程序总是除以4的偶数,甚至是那些没有被4整除,因此6之后的下一步将是6/4 == 1.
  2. 我们知道即使有替代行为,程序也总是达到停止条件,不知道代码中是否有其他更改...

,它需要

  1. 数从n步数,直到我们达到停止条件包括正本身
  • 回报的所有步骤中Shortz(N)的总和

    为最终的答案,我需要回到(的737458374680773所有步骤的总和)*

    的问题(的98325112步数)是当我计算这一个:737458374680773它进入无限循环。

    至于这个提示:

    如果不知道有代码的另一个变化......

    我不认为我需要用奇数公式,因为任何改变这在我看来是太过分了(但是,嘿,我不知道太多,启迪我:))。

    任何关于我的代码有什么问题或者我没有得到有关任务的想法?

    这是我的代码:

    import math 
    def shortz(num): 
        iterations = 0 
        stepsSum = 0 
        while(math.isnan(num) or num<0): 
         num = int(input("Please supply a non-negative number ==> ")) 
         print("") 
        while(num !=1): 
         if (num%2==0): 
          num /= 4 
          stepsSum += num  
          print (str(iterations+1) + ") " + str(num)) 
         else: 
          num = (num*3) -1 
          print (str(iterations+1) + ") "+ str(num)) 
         iterations += 1 
         stepsSum += num 
        print ("the number of iterations is " + str(iterations)) 
        print ("the sum of all steps is " + str(stepsSum)) 
    
    q=0 
    while (q<1): 
        x = int(input("Input positive number: ")) 
        shortz(x) 
        z = str(input("Again?")).lower() 
        if z[0]=='n': 
         q=2 
    

    非常感谢!

  • 回答

    0

    你的逻辑处理不当 '2' 和进入无限循环:

    2/4为0.5 - >(0.5 * 3) - 1 - > 0.5 - >(0.5 * 3) - 1 - > 0.5等

    Input positive number: 2 
    1) 0.5 
    2) 0.5 
    3) 0.5 
    4) 0.5 
    5) 0.5 
    6) 0.5 
    7) 0.5 
    ... 
    

    您可能需要使用num //= 4,而不是num /= 4摆脱了小数部分。但是,这并不能修复该故障,只是改变了重复的结果,从0.5到0.1

    不知道是否有在代码中的另一个变化......

    很有可能指的是如何处理零。这不是一个正整数,所以不是一个有效的输入到shortz(),但它仍然作为内部结果(如果你使用//),所以必须专门处理。 (同上0。5,如果你继续使用/

    也许一些简单的改变:

    while(num !=1): 
    

    ,而不是为:

    while num > 1: 
    

    这(使用//一起)同时允许你的榜样号码解决。

    +0

    伟大的分析! (在我眼里:)) 我认为这可能是它,但只知道下周。非常感谢。 – MatanyaP