2015-05-14 45 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之後,......)