//贝格尔编排法 function berger(){ ?? ?// 双循环
? ? ? ? // 根据队伍数量生成数组 ? ? ? ? $num = 10; ? ? ? ? $ar = []; ? ? ? ? for ($i = 1; $i <= $num; $i++) { ? ? ? ? ? ? $ar[] = $i; ? ? ? ? }; ? ? ? ? // halt($numArr); ? ? ? ? // $ar = array('1', '2', '3', '4', '5', '6' ,'7','8','9');直接传入数组或者选手名称或者id或者标识 ? ? ? ? if (count($ar) % 2) $ar[] = '0'; ? ? ? ? $t = array_merge(range(1, count($ar) - 1), range(1, count($ar) - 1)); ? ? ? ? $len = count($ar); ? ? ? ? $m = range(1, $len); ? ? ? ? $lun = 0; ? ? ? ? $last = 0; ? ? ? ? $k = $len <= 4 ? 1 : ($len - 4) / 2 + 1; ? ? ? ? while ($lun++ < ($len - 1) * 2) { ? ? ? ? ? ? $s = array_values($m); ? ? ? ? ? ? echo "== 第$lun" . "轮 ==</br>"; ? ? ? ? ? ? for ($i = 0; $i < $len / 2; $i++) { ? ? ? ? ? ? ? ? printf("%s -- %s </br>", $ar[$s[$i] - 1], $ar[$s[$len - 1 - $i] - 1]); ? ? ? ? ? ? }
? ? ? ? ? ? list($m[0], $m[$len - 1]) = array($m[$len - 1], $m[0]); ? ? ? ? ? ? for ($i = 0; $i < $k; $i++) { ? ? ? ? ? ? ? ? if ($m[++$last % $len] == $len) $last++; ? ? ? ? ? ? } ? ? ? ? ? ? $n = $last %= $len; ? ? ? ? ? ? for ($i = 1; $i < $len; $i++) { ? ? ? ? ? ? ? ? if (($m[$n]) == $len) $n = ($n + 1) % $len; ? ? ? ? ? ? ? ? $m[$n] = $i; ? ? ? ? ? ? ? ? $n = ($n + 1) % $len; ? ? ? ? ? ? } }
|