我有团体地图。每个小组都有玩家名单:
Map<String, List<Player>> playerByGroup = new LinkedHashMap<String, List<Player>>();
例如:
地图包含:
group A: players 1 2 3 4 5 6
group B: players 7 8 9 10 11 12
group C: players 13 14 15 16 17 18
group D: players 19 20 21 22 23 24
现在我需要创建时间表。每个组中的每个玩家都应该是来自另一组玩家的玩家
例如:
玩家1应该是玩家7到24的玩家,而不是玩家2 - 6
创建
这不是问题但现在我有问题:
我需要创建包含numberOfPlayer / 2游戏的round。在回合中,每个玩家只能玩一次
例如
1.round should be looks like:
1.game 1 vs 7
2.game 13 vs 19
3.game 3 vs 9
4.game 14 vs 20
5.game 2 vs 8
6.game 15 vs 21
7.game 4 vs 10
8.game 16 vs 22
9.game 5 vs 11
10.game 17 vs 23
11.game 6 vs 12
12.game 18 vs 24
2.round ...
应该只有18轮,因为一名球员应该与18名球员一起比赛。
问题:
问题是只创造18轮,每轮一名球员只打一次
答案 0 :(得分:0)
提示你:
将其视为组合问题,每组中有6
个人。小组数4
。你需要每个玩家玩,但不是在组中,那么组合的总数将是
24C4 - 4*(6*(6-1)/2)
(C
是Combination)或
(24*23*22*21)(4*3*2*1) - 4*(6*(6-1)/2)
。相应的代码。
答案 1 :(得分:0)
我将以你的例子解释你的答案。 在一般情况下很容易扩展它。
将你的轮数分成三个主要组,所以我们每组有6轮。
在第一轮中有六轮:
A组的所有球员都将对B组的所有球员进行比赛,C组的所有球员都将对D组的所有球员进行比赛。
在第二组中,A组的所有队员将对C组的所有队员进行比赛,B组的所有队员将对D队的所有队员进行比赛。 在第三组中,A组的所有队员都将参加D组的所有队员,B组的所有队员都将参加C队的所有队员。