PHP アルゴリズムを教えてください。
フットボール リーグ用のアルゴリズムを作成する必要があります。
要求は次のとおりです。 非常に単純です。
A1 A2 A3 A4 A5 A6
1 ラウンドで試合がある場合
最初のディスカッション
A1VSA2 A3VSA4 A5VSA6
第 2 ラウンド
A1VSA4 A2VSA5 A3VSA6
第三ラウンド
....
各チームは、ホーム ゲーム 5 試合とホーム ゲーム 5 試合を含む、他の 5 チームと 10 試合を行います。アウェイゲーム (前後)
このアルゴリズムはとても心配です
結局のところ、ユーザーが 2 番目を選択できる場合は 1 ラウンドに基づいている必要があります。ラウンドすると、第2ラウンドで誰と誰が対戦するかが表示されます。
-----解決策---------
$a = array('A1', 'A2', 'A3', 'A4', 'A5', 'A6');<br /><br />berger_method($a);<br /><br />function berger_method($ar) {<br /> if(count($ar) %2) $ar[] = ' ';<br /> $t = array_merge(range(1, count($ar)-1), range(1, count($ar)-1));<br /><br /> $len = count($ar);<br /> $m = range(1, $len);<br /> $lun = 0;<br /> $last = 0;<br /> $k = $len <= 4 ? 1 : ($len - 4) / 2 + 1;<br /> while($lun++ < $len-1) {<br /> $s = array_values($m);<br /> echo "== $lun ==\n";<br /> for($i=0; $i<$len/2; $i++) printf("%s -- %s\n", $ar[$s[$i]-1], $ar[$s[$len-1-$i]-1]);<br /> echo "\n";<br /><br /> list($m[0], $m[$len-1]) = array($m[$len-1], $m[0]);<br /> for($i=0; $i<$k; $i++) {<br /> if($m[++$last % $len] == $len) $last++;<br /> }<br /> $n = $last %= $len;<br /> for($i=1; $i<$len; $i++) {<br /> if(($m[$n]) == $len) $n = ($n + 1) % $len;<br /> $m[$n] = $i;<br /> $n = ($n + 1) % $len;<br /> }<br /> }<br />}<br />
== 1 ==<br />A1 -- A6<br />A2 -- A5<br />A3 -- A4<br /><br />== 2 ==<br />A6 -- A4<br />A5 -- A3<br />A1 -- A2<br /><br />== 3 ==<br />A2 -- A6<br />A3 -- A1<br />A4 -- A5<br /><br />== 4 ==<br />A6 -- A5<br />A1 -- A4<br />A2 -- A3<br /><br />== 5 ==<br />A3 -- A6<br />A4 -- A2<br />A5 -- A1<br />これは単一ループです