我有一组数字([1,2,3,4,5,6,7,8,9,10]
)。这些数字代表球员。我希望这些玩家能够彼此“玩”一次。
我需要为这些游戏创造“回合”。这些回合将包括偶数次比赛,每个玩家最多只能进行一轮比赛。如果有一些奇数的比赛,那么比赛数量不规则的最后一轮比赛是可以的。
最终结果是“Round”数组的数组。这些圆形阵列将包含玩家之间的匹配。最终结果如下所示,但完整:
[[[1,2],[3,4],[5,6],[7,8],[9,10]],[[1,3],[2,4],[5,7],[6,8],[9,1],[10,2]]]
我发现Array#combination
用于创建匹配项,但我似乎无法正常构建。
答案 0 :(得分:2)
这称为循环赛。维基百科提供以下algorithm
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
每轮玩家只有一个玩家处理奇数玩家,没有游戏(通常通过添加虚拟玩家来实现)。