2011-05-18 18 views
0

斐伊川,我有這個問題
有N [甚至]誰想要下棋
玩家人數我怎樣才能獲得隨機的球員和對手? [每個球員將只得到一個機會]從池中選擇棋手 - 算法

認爲有6播放器 - P1,P2,P3,P4,P5,P6
我想做一個代碼,會爲我
P1 VS P5做這樣的常規
P2 VS P6
P3 VS P4

+0

我想這取決於你想要做進去。 – Chad 2011-05-18 14:32:25

+0

什麼語言算法並不真正依賴於語言 – sehe 2011-05-18 14:33:07

+0

爲什麼下跌票? – kefeizhou 2011-05-18 14:36:08

回答

2

您可以將唯一的隨機編號分配給每一個球員,排序PL ayer列表使用該號碼並且選擇對1-2,3-4,5-6等等。由於現在幾乎所有的語言都內置了排序,因此應該非常快。

+0

PLZ解釋一點點,並用一個例子 – Sourav 2011-05-18 14:51:01

+0

這在Perl:'子配對{我@sorted =映射$ _-> [1],排序{$一 - > [0] <=> $ B - > [ 0]} map [rand(),$ _],@_;我的@result; push @result,[shift @sorted,shift @sorted],而1 <@sorted;返回@result;}'而示例用法:'用於(配對(1..10)){打印 「$ _-> [0] \ T $ _-> [1] \ n」 個}' – btilly 2011-05-18 17:04:46

1

all combinations和隨機他們Fisher-Yates

+0

但他只是想要一個組合。所以只需要用數字1到6填充一個數組並進行洗牌。然後玩家[0]和玩家[1]玩,玩家[2]和玩家[3],玩家[4]和玩家[5]。 – 2011-05-18 16:08:03

0
store players in array a of size n 
let p be a pair(w, b) 
let l be a list of pairs 
while n > 0 
    let x be a random number between 0 and n 
    add player at index x in a to p as w 
    remove index x from a 
    n-- 
    let y be a random number between 0 and n 
    add player at index y in a to p as b 
    remove index y from a 
    n-- 
    add p to l 
endwhile 
+0

我想你想隨機拿一個標記,然後縮小播放器數組!我對嗎 ? – Sourav 2011-05-18 14:41:41