Pythonのゲームで勝つかどうかを調べるプログラム
n個のビー玉があり、各ラウンドで、プレーヤーが正の平方数のビー玉を取る必要がある2人用ゲームをプレイしているとします。プレイヤーがその正方形のビー玉をとることができない場合、彼/彼女は負けます。したがって、数字nが与えられた場合、ゲームに勝つことができるかどうかを確認する必要があります。私たちは常に最初のターンを行い、最適な数のビー玉を選択します。
したがって、入力が14のような場合、出力はTrueになります。最初のターンでは、9個のビー玉を取ります。これにより、5個のビー玉が残り、他のプレーヤーは最大4個のビー玉を取り、1個のビー玉を残すことができます。したがって、次のターンでは、最後のビー玉を取り、相手の後ろに0個のビー玉を残して移動できません。したがって、私たちは勝ちます。
これを解決するには、次の手順に従います-
- n <=0の場合、
- Falseを返す
- ans:=False
- ((n)の平方根)の整数部分から-1までの範囲のiの場合、1ずつ減少します。
- i * i> nの場合、
- ループから抜け出す
- ans:=ans OR(解決しない(n-i * i))
- ansがTrueの場合、
- 回答を返す
- i * i> nの場合、
- 回答を返す
例
理解を深めるために、次の実装を見てみましょう-
from math import sqrt def solve(n): if n <= 0: return False ans = False for i in range(int(sqrt(n)), 0, -1): if i * i > n: break ans = ans | (not solve(n - i * i)) if ans: return ans return ans print(solve(14))
入力
14
出力
True
-
グラフがPythonのすべての人によってトラバース可能かどうかを確認するプログラム
0からn-1までの番号が付けられたn個の頂点を含むグラフが与えられたとします。グラフは無向であり、各エッジには重みがあります。グラフには3種類の重みを設定でき、各重みは特定のタスクを示します。グラフをトラバースできるのは、ジャックとケーシーの2人です。エッジの重みが1の場合、ジャックはグラフをトラバースできます。重みが2の場合、ケーシーはグラフをトラバースできます。エッジの重みが3の場合、両方がグラフをトラバースできます。グラフを両方でトラバース可能にするために必要なエッジをすべて削除する必要があります。ジャックとケーシー。グラフをトラバース可能にするために削除するエッジの数を返します。トラバ
-
Pythonで繰り返される整数ゲームを削除して勝つための動きの数を見つけるためのプログラム
2人の友人のAmalとBimalが、numsと呼ばれる番号のソートされたリストを使用してゲームをプレイしているとします。このゲームでは、1ターンで、アマルは任意の3つの数字を選択します。 Bimalはそれらの1つを削除し、次にAmalはそれらの1つを削除します。リストは奇数の要素から始まります。ここで、Amlaは、リストに繰り返し要素が含まれないようにするために必要なターン数を最小化することを望んでいます。Bimalは、ターン数を最大化することを望んでいます。アマルとビマルが最適に行動する場合、このゲームに必要なターン数を見つける必要があります。 したがって、入力がnums =[1、1、2、