0

我有一个数字数组([1,2,3,4,5,6,7,8,9,10])。这些数字代表球员。我希望这些玩家每个人都能“玩”一次。

我需要为这些游戏创建“回合”。这些回合将包括偶数场比赛,每个玩家最多只能在一个回合中玩一次。如果比赛的数量是奇数,那么最后一轮比赛的数量不规则是可以的。

最终结果是“圆形”数组的数组。这些圆形数组将包含玩家之间的比赛。最终结果如下所示,但完整:

[[[1,2],[3,4],[5,6],[7,8],[9,10]],[[1,3],[2,4],[5,7],[6,8],[9,1],[10,2]]]

我发现Array#combination可以创建匹配项,但我似乎无法正确构建回合。

4

1 回答 1

2

这被称为循环赛。维基百科给出了以下算法

Round 1. (1 plays 14, 2 plays 13, ... )
 1  2  3  4  5  6  7
 14 13 12 11 10 9  8

然后固定一名参赛者(本例中为第一名)并将其他参赛者顺时针旋转一个位置:

Round 2. (1 plays 13, 14 plays 12, ... )
 1  14 2  3  4  5  6
 13 12 11 10 9  8  7

并继续旋转:

Round 3. (1 plays 12, 13 plays 11, ... )
 1  13 14 2  3  4  5
 12 11 10 9  8  7  6

奇数玩家每轮由一名没有游戏的玩家处理(通常通过添加一个虚拟玩家来实现)。

于 2013-03-05T19:34:53.237 回答