2010-09-12 137 views
1

我需要一些幫助。我想創建一個比賽。假設我有6名球員。 1 2 3 4 5 6php中的錦標賽算法

我想創造一些..讓'說'階段...每個玩家將在5個不同的階段玩5場比賽(球員數量 - 1)。在一個階段中,所有球員只能出現一次。

例如,對於6名球員我想產生這些結果:

Squad 1: 

1-2 
3-4 
5-6 

Squad 2: 

1-3 
2-5 
4-6 

Squad 3: 

1-4 
2-6 
3-5 

Squad 4: 

1-5 
2-4 
3-6 

Squad 5: 

1-6 
2-3 
4-5 

所以,在每一個階段,比賽必須是唯一的,每個球員必須在每次播放器上播放。

我想要一個算法,將有工作,即使我想8名球員,或12,或16,或28

感謝

+0

我曾經有過類似的情景和「解決」它某種混洗和失敗狀態處理。所以它更多的是洗牌和蠻力的組合。它表現不佳,所以我不知道它是否會對你有好處。 – 2ndkauboy 2010-09-12 14:59:52

+4

對不起,但堆棧溢出不是你想要的網站,但你必須自己做一些事情,並問我們對它的看法。 – 2010-09-12 14:59:52

+1

你已經試過了什麼? – Gareth 2010-09-12 15:18:50

回答

3
<?php 
$numplayers = 6; 
if ($numplayers % 2 != 0) $numplayers++; // Dummy 

for ($round = 0;$round < $numplayers - 1;$round++) { 
    echo 'Squad ' . ($round+1) . ":\n\n1-"; 

    for ($i = 0;$i < $numplayers-1;$i++) { 
     if ($i % 2 == 0) { 
      $player = ($numplayers-2) - ($i/2) - $round; 
     } else { 
      $player = ((($i-1)/2) - $round); 
     } 
     if ($player < 0) $player += $numplayers - 1; 
     echo ($player+2); 
     echo ($i % 2 == 0) ? "\n" : '-'; 
    } 
    echo "\n\n"; 
}