2016-07-25 19 views
0

私の目標は です。私たちは、ゴールインチのレンガの列を作りたいと思っています。小さなレンガ(それぞれ1インチ)と大きなレンガ(それぞれ5インチ)があります。与えられたレンガから選択してゴールを作ることができるなら、Trueを返します。Pythonでwhileループを使ってCodingbat make_bricksがタイムアウトしました

私のコードは次のとおりです。私のIDLEで

def make_bricks(small, big, goal): 
    if small + 5*big < goal: 
    return False 
    elif small + 5*big == goal: 
    return True 
    else: 
    while small > 0: 
     small -= 1 
     goal -= 1 
     if goal % 5 == 0 and big >= goal/5: 
     return True 
    return False 

これはうまく動作しますが、codingbatはTIMEDOUTになりました。大きい数字のためwhileループが遅すぎるので、それは起こっていますか?私はPython 3.2.5を使用しています。

EDIT:

def make_bricks(small, big, goal): 
    if small ==0: 
    if goal % 5 == 0 and goal/5 <= big: 
     return True 
    else: 
     return False 
    elif small + 5*big < goal: 
    return False 
    elif small + 5*big == goal: 
    return True 
    else: 
    while small > 0: 
     small -= 1 
     goal -= 1 
     if goal % 5 == 0 and big >= goal/5: 
     return True 
    return False 

しかし、同じ問題を持つ:

は、私は別のコードを試してみました。

+0

どのような値が「小」の場合、タイムアウトになりますか? – Carcigenicate

+0

タイムアウトはすべての列にありますが、ある結果がタイムアウトするとタイムアウトになります。しかし、私はあなたの質問が深いことを見て、あなたはそれを指摘した。小さな== 0のときに問題が発生することがあります。 – Bobesh

+0

Didnt work、同じ問題 – Bobesh

答えて

0

私はそれがうまくいかないことを知っています。あなたのコードは動作します。しかし、約229500のloopがある場合(私はcodebatで限界値を見つけようとしましたが、時にはこの値でタイムアウトしてしまうこともありますが、値はarround 230kです)すべての値がタイムアウトになります。要約すると、あなたのコードは動作していますが、make_bricks(1000000, 1000, 1000100) → Trueテストでは、ループが大きすぎて、Codebatがクラッシュします。

だから、あなたはそれがCodebat上で動作するようにしたい場合は、while声明を取り除く必要があります:

def make_bricks(small, big, goal): 
    if small>=5 : 
     if (goal - (big + (small // 5 - 1)) * 5) <= (small % 5 + 5): 
      return True 
     else: 
      return False 
    else : 
     if (goal - big * 5) % 5 <= (small % 5) : 
      return True 
     else : 
      return False 

small//5リターンwhole division。 これは十分だと思います。 (これは申し訳ありませんがアルストの編集です)

+0

私の目標はそれだけでは解決していませんが、間違いも見つけます。私のコードで問題は見えますか? – Bobesh

+0

@Bobeshあなたのコードは動作するはずです。論理が働いて、タイプミスはありません。いくつかの繰り返し以上のwhileステートメントを好きではないコードバットで問題になるかもしれません(おそらく無限ループでオーバーロードされることはありません)。しかし、私は本当にあなたが正しいことを信じています – pwnsauce

関連する問題