0

我有团体地图。每个组都有球员名单:

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 游戏的回合。在一轮中,每个玩家只能玩一次

例如

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 轮,每轮只有一名玩家玩一次

4

2 回答 2

0

给你的提示:

把它想象成一个组合问题6,每个组都有人。组数4。您需要每个玩家一起玩但不是在组中,那么组合的总数将是 24C4 - 4*(6*(6-1)/2)C组合)或 (24*23*22*21)(4*3*2*1) - 4*(6*(6-1)/2)。相应地编码。

于 2012-09-03T10:02:14.913 回答
0

我会为你解释答案的例子。在一般情况下很容易扩展它。

将您的回合分为三个主要组,因此我们每组有 6 个回合。

在第一盘六轮比赛中:

A组的所有球员都将与B组的所有球员比赛,C组的所有球员将与D组的所有球员比赛。

in the second set all players of group A will play to all players of group C and all players of group B will play to all players of group D. in the third set all players of group A will play to all players of group D and all players of group B will play to all players of group C.

于 2012-09-03T12:17:35.660 回答