我在我的一个项目中遇到了一个小问题,我希望你们能把事情弄清楚。
情况是这样的,我有一个由12人组成的小组,分为4组。这是一系列三轮比赛中的第一排.
我的问题是这样的;我怎样才能重新呈现这些团体,在接下来的两轮中,让以前没有见过的人见面呢?
我希望重新呈现的组是独一无二的,例如。在接下来的两轮比赛中,第1人不得与第2人或第3人组成一个小组。如果第1人在第二轮中与第4个人和第5人组成一个小组,则在最后一轮中,这些人也应被排除在外。
集团1
人1,人2,人3
集团2
第4人、第5人、第6人
集团3
人7,人8,人9
集团4
人10,人11,人12
发布于 2013-01-07 06:16:33
试试这个:
for (i = 0 to NrGroups-1) do // NrGroups = 4
{
newGroup + (i+1) = Arr[i] +
Arr[(i+(Arr.length/NrPersonsInGroup))%Arr.length] +
Arr[(i+(Arr.length/NrPersonsInGroup+1))%Arr.length]; // NrPersonsInGroup = 3
}
发布于 2013-01-07 21:51:21
听起来你需要一个组合算法。有关组合(如性能等)的更多详细信息,请检查这里和包含说明的代码示例,您可以检查这里。
您的具体实现是12人一次服用3人,不重复。这给了你220个可能的组。
一种检查同一两个人以前是否属于一组的方法是保存已组成的小组的记录,并对照记录检查任何新的组,看看被比较的两组是否有任何共同之处。
https://stackoverflow.com/questions/14190722
复制相似问题