私はこの数学の問題を解決するためにいくつかのコードを書こうとしています:8チームあり、それらのすべてがお互いにフットボールの試合をプレイします(合計7 + 6 + ... + 1 = 28試合)、勝ち負けの2つのチャンスがあります。各チームには少なくとも1勝1敗の戦闘がいくつあるかがあります。あなたが質問を得ることができなかったならば、私は再び説明しようとしてください。問題は私のコードが無限に増えていくことです(無限ループです。何が問題なのかを理解するために関数print文を書いた)。ここで私のコードは何だと思いますか?ありがとうございました。再帰関数は無限にpythonを回し続ける
num = 8
team = [0,0,0,0,0,0,0,0]
order = []
how_many_stats = 0
temp = 0
for i in range(num):
for t in range(i+1 , num):
order.append([i,t])
total_matches = len(order) - 1
curr_matches = - 1
def do_match():
global num
global team
global order
global how_many_stats
global temp
global total_matches
global curr_matches
print(how_many_stats)
curr_matches += 1
team[order[curr_matches][0]] += 1 # first wins
if not curr_matches == total_matches:
do_match()
else:
for i in range(num):
if team[i] > 0 and team[i] < 7: #7/8?
temp += 1
if temp == num:
how_many_stats += 1
temp = 0
team[order[curr_matches][0]] -= 1 # take back the action
team[order[curr_matches][1]] += 1 # second wins
if not curr_matches == total_matches:
do_match()
else:
for i in range(num):
if team[i] > 0 and team[i] < 7: #7/8?
temp += 1
if temp == num:
how_many_stats += 1
temp = 0
team[order[curr_matches][1]] -= 1
curr_matches -= 1
return
do_match()
print(how_many_stats)
Explainment:私はゲームのための道路を宣言し、(などの第三チーム対第二チーム対1チーム、第一チーム)の配列にそれらを取った後、私はその配列の順に行動にそれらを取りました。この道が条件を満たしているかどうかにかかわらず、各ゲームの勝利と敗北についてのツリーを構築し、各支店の終わりにコントロール構造を構築する可能性があります。もしhow_many_statsの値が1になったらもう一度やり直してもう一度やり直してください。もし満たされなければもう一度歩いて1歩前に戻ってみましょう。すでに2つのノードの両方が見えたら、もう一度やり直してください。
ええ、それは本当にかなりブルートフォースです。しかし、ブルートフォースは、プロセスはちょうど長い時間がかかりますが、私は間違っている間違った結果を与えていないことを意味しますか?なぜこのアルゴリズムが間違った結果をもたらすのではないのでしょうか?さまよっただけで、あなたの時間をありがとう。 –
あなたは正しいです、出力を見ると、すべてのチームのカウントが0より大きいラインのみをカウントする必要があります。そうしないと、1つの勝利を必要とし、それができません。しかし、理由を理解するために、私は実際にあなたのコードを理解しなければならないでしょう....だから両方の問題を解決するべき別のアプローチの私の更新答えを見てください。 –