2010-07-02 19 views
0

Je sais déjà qu'il y a des réponses pour ce genre de chose, mais je ne sais pas vraiment comment les implémenter dans mon code. Aussi, je voudrais m'abstenir d'utiliser d'autres fonctions à moins que cela ne soit nécessaire. Voici mon code:Comment exactement dois-je implémenter un algorithme aléatoire ou aléatoire pour un tableau pour afficher des citations dans un ordre aléatoire?

int main() 
{ 
unsigned seed; 
seed = 1; 
srand(seed); 
std::string starFox[8]; 
int x[8]; 
starFox[0] = "Do a barrel roll!"; 
starFox[1] = "Try a somersault!"; 
starFox[2] = "Use bombs wisely!"; 
starFox[3] = "Something is wrong with the G-diffuser"; 
starFox[4] = "Can't let you do that, Star Fox"; 
starFox[5] = "Hey Einstein, I'm on your side"; 
starFox[6] = "Whoa! help me!"; 
starFox[7] = "Daddy screamed REAL good before he died!"; 

for(int i=0; i<8; i++) 
{ 
    int y = 0 + rand() % 8; 
    x[i] = y; 

    if (x[i-1]!=y || x[i-2]!=y || x[i-3]!=y || x[i-4]!=y || x[i-5]!=y || x[i-6]!=y || x[i-7]!=y) 
    {//now I need to make a statement that makes sure each number appears once. 
    std::cout << starFox[y] << "\n";} 
} 
std::cout << '\n'; 

return 0; 
} 

Alors, que dois-je modifier sur ce code pour le rendre générer des nombres aléatoires à chaque fois que le programme exécute?

+0

Voir http://stackoverflow.com/questions/1133942/what-is-the-most-efficient-way-to-pick-a-random-card-from-a-deck- quand-certaines-cartes parmi d'autres. –

Répondre

1

Vous semez la même valeur chaque fois que vous courez, de sorte que vous obtenez toujours la même séquence pseudo-aléatoire. Essayez ceci:

srand(time(0)); 
0

Plutôt que d'utiliser un tableau pour garder une trace de ceux qui ont été vus, que diriez-vous si vous stockez les citations dans une liste et supprimez simplement une citation après qu'elle a été utilisée.

0

Vérifiez ce solution pour aléatoire aléatoire.

5

Utilisez std::random_shuffle

// Shuffle 
std::random_shuffle(starFox, starFox + 8); 

// And write to standard output 
std::copy(starFox, starFox + 8, 
      std::ostream_iterator<std::string>(std::cout, "\n")); 
+0

Merci, mais où pourrais-je les mettre dans le programme? Et que dois-je inclure pour éviter les erreurs? –

+0

@Mr. Tsar: Ce code remplacera votre boucle for. Vous aurez besoin de '#include ' –

+0

Oh, et '#include ' –

1

Solution shuffle aléatoire:

  • Mettez tous les chiffres que vous voulez mélanger dans un récipient (vecteur) (Appelez-src)
  • Créer un vide conteneur qui est ordonné de mettre les numéros que vous les sélectionnez au hasard (Appelez le dst)
  • tandis que (src n'est pas vide)
    • générer un nombre aléatoire [0, len (src)) (note non inclus)
    • Retirez l'élément à src [Rand]
    • Mettre l'élément enlevé dans dst