2015-05-14 41 views
0

如何组合10个问题,让每个学生(总学生= 10)获得独特的组合。10个问题的独特组合

我不想使用阶乘。

+0

你忘了问一个问题。所有10个问题只有一个[组合](http://en.wikipedia.org/wiki/Combination)。如果你想让所有的学生得到相同的问题,但顺序不同,你需要独特的[置换](http://en.wikipedia.org/wiki/Permutation)。搜索“生成排列”。 –

回答

0

有十亿个不同的排列组合。例如:

1,2,3,4,5,6,7,8,9,10 
2,7,9,8,3,1,6,4,10,5 
... 

实际上,每次10个取10个项目有3,628,800个不同的排列组合。

如果您只需要其中的10个,您可以从其中包含值1-10的数组开始。然后shuffle the array。这成为您的第一个排列。再次重新排列数组并检查是否已经生成了该排列。重复这个过程:洗牌,检查,保存,直到你有10个独特的排列。

这是非常不可能的(尽管可能),你会在10次尝试中生成重复排列。

生成副本的可能性随着生成更多排列而增加,到生成约2,000时增加到50%。但如果你只想要几百或更少,那么这种方法会很快为你做到。

所提出的循环队列技术也起作用,并且具有简单性的好处,但所得序列仅仅是原始顺序的旋转,并且在没有混洗的情况下它不能产生超过10个。我建议的技术会产生更多的“随机”看序。

1

可以使用圆形队列数据结构 enter image description here

现在你可以在你喜欢的任何点切割此,它然后它会给你的唯一字符串 例如,如果剪切此在2之间点和3,然后迭代您的队列,将得到: 3,4,5,6,7,8,9,10,1,2 enter image description here

所以需要实现一个循环队列,再切它从10个不同的点(1之后,2之后[如图2所示],3之后,......)