2012-11-11 6 views
0

Possible en double:
Pseudo-Random Traversal of a SetUtiliser la liste entière en nombres pseudo-aléatoires de génération

Je suis en train d'écrire un algorithme qui va mettre les chansons d'une liste de lecture dans un ordre aléatoire , donc s'il y a 10 chansons, j'ai besoin du générateur de nombres aléatoires pour atteindre chaque valeur de 0-9 avant de répéter. En utilisant l'algorithme: x_current = (a * x_prev + c) mod m, est-il possible d'atteindre cet objectif avec certaines valeurs pour c et m?

+0

Avez-vous regardé std :: random_shuffle? (Et std :: shuffle en C++ 11?) – rici

+0

Ce que vous voulez n'est pas une liste de nombres aléatoires, mais d'échanger des entrées choisies au hasard d'une liste de chansons un certain nombre de fois. –

Répondre

0

Jetez un oeil à this question. En outre, pour les petites listes de lecture, il suffit de mélanger un tableau avec les numéros de morceaux.

+0

"Mélanger simplement un tableau" est la description du problème. –

+0

Traverser un ensemble dans un ordre aléatoire sans répétition est la description du problème. Mélanger un tableau serait une solution possible. –

+0

Vous avez raison; Je suggère simplement que vous devrez peut-être aller un peu plus loin que la description du problème pour que le PO puisse le reconnaître comme une solution possible. :) Son "algorithme" proposé est déjà destiné à mélanger essentiellement un tableau et il essaie de trouver une autre façon de le faire. –

2

Essayez d'utiliser 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

Ou juste std :: shuffle, en utilisant un moteur de ''. – bames53

Questions connexes