2016-11-11 120 views
0

我试图让三个数字的组合增加到810并乘以10760040.这是我迄今为止;蛮力算法停止循环

x = 1 
y = 1 
z = 1 

keepGoing = 1 

while keepGoing == 1: 
    if x+y+z == 810: 
     if x*y*z == 10760040: 
      print(x) 
      print(y) 
      print(z) 
     else: 
      keepGoing = 2 
      z = 1 
      print("no z") 
     elif z == 810: 
     keepGoing = 2 
     print("no") 
    else: 
     z += 1 




while keepGoing == 2: 
    if x+y+z == 810: 
     if x*y*z == 10760040: 
      print(x) 
      print(y) 
      print(z) 
     else: 
      keepGoing = 3 
      z = 1 
      y = 1 
      print("no y") 

    elif y == 810: 
     keepGoing = 3 
    else: 
     z += 1 
     keepGoing = 1 

while keepGoing == 3: 
    if x+y+z == 810: 
     if x*y*z == 10760040: 
      print(x) 
      print(y) 
      print(z) 
      print("Success") 
     else: 
      print("Failure") 
    elif x == 810: 
     print("none") 
    else: 
     x += 1 
     keepGoing = 1 

我知道这个代码是reaaaally基本的,但我没有在很长一段时间做过任何Python和我试图找到添加使810繁衍到10760040,任何帮助将号码列表太棒了,谢谢!

+0

你必须巢对方内线的三个环路。现在,您正在测试'z'的所有值,使用'x'和'y'的初始值,然后测试'y'的所有值,使用'x'的初始值和'z'的最终值,以及等等。 –

+0

声音更适合http://codereview.stackexchange.com/。 –

+0

那么我将如何嵌套循环?在哪一点? @tobias_k –

回答

3

一个更清洁,更简单的代码是:

for x in range(1,810): 
    for y in range(1,810-x): 
     z = 810-x-y 
     if x*y*z == 10760040: 
      print 'x={},y={},z={}'.format(x,y,z) 
+0

在'z'的负值上浪费周期,'y'的值<''x',并且摘要不清楚是否允许候选者重复使用数字。 – MattH

+1

@MattH:你说得对,我在内部循环中加了'-x'。作为一个侧面说明,可能会有更多效率方面的改进,因为这基本上是一个由两个方程构成的系统,需要解决3个变量。但是,我主要集中于简化OP的代码,这对于特定的问题似乎过于复杂。 –

+0

非常感谢你!这是完美的 –