如何形成10个问题的组合,以便每个学生(总学生= 10)获得独特的组合。
我不想使用阶乘。
答案 0 :(得分:1)
您可以使用循环队列数据结构
现在你可以在你喜欢的任何一点剪切它,然后它会给你一个独特的字符串
例如,如果你在2到3之间切换它然后迭代你的队列,你将得到:
3,4,5,6,7,8,9,10,1,2
所以你需要实现一个循环队列,然后从10个不同的点(1之后,2之后[图2所示],3之后,......)切割它。)
答案 1 :(得分:0)
有十亿种不同的排列。例如:
1,2,3,4,5,6,7,8,9,10
2,7,9,8,3,1,6,4,10,5
...
实际上,每次10个项目共有3,628,800种不同的排列。
如果你只需要10个,你可以从一个值为1-10的数组开始。然后是shuffle the array。这成为你的第一个排列。再次对阵列进行洗牌并检查您是否尚未生成该排列。重复这个过程:随机播放,检查,保存,直到你有10个独特的排列。
您极不可能(尽管可能)仅在10次尝试中生成重复的排列。
当您生成更多排列时,生成重复项的可能性会增加,在您生成大约2,000个排名时会增加到50%。但是如果你只想要几百或更少,那么这种方法很快就会为你做到。
所提出的循环队列技术也起作用,并且具有简单的优点,但是所得到的序列只是原始顺序的旋转,并且如果没有混乱,它不能产生超过10个。我建议的技术会产生更多“随机”的排序。