2016-11-11 4 views
0

私は、810に加えて10760040に乗算する3つの数字の組み合わせを得ようとしています。私はこのコードはreaaaally基本的なものですが、私は長い時間の中で任意のPythonのを行っていないと私は、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 

素晴らしい、ありがとう!

+0

あなたが持っているものを3つのループ。今は、 'x'と' y'の初期値を使って 'z'のすべての値をテストし、' x'の頭文字と 'z'の最後を使って' y'のすべての値をテストしています。そうです。 –

+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つの変数で2つの方程式のシステムであるため、これを補う必要があります。しかし、私は主にOPのコードを簡素化することに集中していました。 –

+0

ありがとうございました!これは完全に動作します –

関連する問題