2012-11-11 44 views
0

可能重複:
Pseudo-Random Traversal of a Set使用整個列表中的僞隨機數生成

我試圖寫一個算法,將放在播放列表的歌曲爲隨機順序,所以如果有10首歌曲,我需要隨機數發生器在重複之前從0-9中打出每個值。使用算法:x_current = (a * x_prev + c) mod m,有沒有什麼辦法可以達到這一點,對於cm的某些值?

+0

你看的std :: random_shuffle? (和C++ 11中的std :: shuffle?) – rici

+0

你想要的不是隨機數列表,而是交換一定數量的歌曲列表中隨機選擇的條目。 –

回答

0

看看this question。另外,對於小型播放列表,只需用歌曲編號對數組進行洗牌就足夠了。

+0

「簡單地洗牌數組」是問題描述。 –

+0

以不重複的順序遍歷集合是問題描述。改組數組將是一個可能的解決方案。 –

+0

你是對的;我只是建議您可能需要從問題描述中稍微進一步,以便OP將其視爲可能的解決方案。 :)他提出的「算法」已經打算基本上洗牌一個數組,他試圖找到一個不同的方式來做到這一點。 –

2

嘗試使用std::random_shuffle

vector<int> playOrder;  

    // set some values: 
    for (int i=1; i<10; ++i) playOrder.push_back(i); // 1 2 3 4 5 6 7 8 9 

    // Don't forget to seed, or mix will be the same each run 
    srand(time(NULL)); 

    // using built-in random generator: 
    random_shuffle (playOrder.begin(), playOrder.end()); 

    // An example of how you might use the new random array. 
    for(int i=0; i<playOrder.size(); i++) 
    player.PlayTrack(playOrder[i]); 
+0

或者只是std :: shuffle,使用''的引擎。 – bames53