ホームページ  >  記事  >  バックエンド開発  >  PHPのアルゴリズムについて教えてください。

PHPのアルゴリズムについて教えてください。

WBOY
WBOYオリジナル
2016-06-13 12:04:321009ブラウズ

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 />
これは単一ループです
二重ループは
while($lun < $len-1) {
の 14 行を
while($lun < ($len-1) に変更します) *2) {
以上です

バーガーがこのような配置方法を思いつくのは本当に大変です
アルゴリズムを直すのに5、6時間かかりました

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。