Comment générer N nombres aléatoires différents?

La fonction peut être rand () ou random () pour générer des nombres aléatoires
Par exemple, la fonction peut être rand () ou random () pour générer des nombres aléatoires et random () ou srandom () pour semer le générateur de nombres aléatoires.

Si vous êtes programmeur, surtout si vous aimez créer des jeux, vous aurez besoin d'un moyen de générer des nombres aléatoires différents les uns des autres. Par exemple, si vous avez un jeu de cartes et que vous avez besoin de 3 cartes différentes, vous aurez besoin de 3 nombres aléatoires différents. 3 nombres aléatoires ne feront pas l'affaire, car ils peuvent être aléatoires mais identiques. Dans cet article, vous utiliserez un pseudo-code; les instructions doivent être viables pour n'importe quel langage de programmation.

Pas

  1. 1
    Déterminez si votre langage de programmation a une fonction aléatoire ainsi qu'une fonction pour amorcer le générateur de nombres aléatoires. Par exemple, la fonction peut être rand () ou random () pour générer des nombres aléatoires et random () ou srandom () pour semer le générateur de nombres aléatoires. La plupart des langages modernes le font et les fonctions rand () ou random () renvoient généralement un rationnel entre 0 et 1.
  2. 2
    Commencez par semer le générateur de nombres aléatoires, de sorte que vous n'obteniez pas la même liste de nombres chaque fois que vous l'exécutez. Pour amorcer le générateur de nombres aléatoires, vous devez passer un entier à la fonction srand. Exemple: 'srand ((unsigned int) time (0))'. Cela passerait le nombre de secondes depuis le 1er janvier 1970.
  3. 3
    Faites-en un entier en multipliant le résultat par la valeur supérieure et en arrondissant le résultat. Par exemple, pour obtenir un nombre aléatoire entre 0 et 50, tapez: random ()% 50.
  4. 4
    Comprenez que pour que tous les nombres soient différents, vous allez créer une boucle jusqu'à ce que vous obteniez autant de nombres que vous pourriez avoir besoin, puis stocker les résultats pour vérifier qu'ils ne sont pas répétés:
    function random_numbers (int howmany, int maxlimit) {int ret_array [howmany] // C'est le tableau où vous stockerez les nombres générés srand ((unsigned int) time (0)) // amorce le générateur de nombres aléatoires while (ret_array. size () <howmany) {int rnd = random ()% maxlimit // Génère un nombre aléatoire int entre 0 et "maxlimit" if (! includes (ret_array, rnd)) {ret_array.push (rnd) // Vous allez pour stocker uniquement les nombres qui n'appartiennent pas au tableau}} return ret_array} 
    Vous aurez besoin de 3 nombres aléatoires différents
    Par exemple, si vous avez un jeu de cartes et que vous avez besoin de 3 cartes différentes, vous aurez besoin de 3 nombres aléatoires différents.
  5. 5
    Programme qui "comprend" la fonction:
    • function includes (int array [], int number) {for (int i = 0; i <array.size (); i) {if (array [i] == number) {return true}} return false} 
    • Répétez autant de fois que nécessaire pour remplir le tableau avec des nombres différents. Pour chaque nombre aléatoire, nous vérifions s'il est déjà dans le tableau. Si ce n'est pas le cas, nous l'enfonçons, sinon nous faisons une boucle et réessayons avec un numéro différent.

Conseils

  • Il existe de nombreuses façons de rendre cela plus rapide, mais cela dépend du langage de programmation que vous utilisez. Par exemple, dans le. NET Framework, vous avez une classe de liste triée. Vous pouvez y stocker les nombres, puis effectuer la fonction «comprend» en utilisant une recherche binaire, ce qui est beaucoup plus rapide.

Mises en garde

  • Les nombres générés par random () n ne sont pas vraiment aléatoires, ils sont pseudo aléatoires. En tant que tels, ils ne conviennent pas aux applications sécurisées.
  • Assurez-vous qu'une liste de nombres pseudo aléatoires uniques est vraiment ce dont vous avez besoin. Par exemple, si vous mélangez un jeu de cartes, il existe des algorithmes spécialement écrits pour cela (et peuvent faire un meilleur travail).
FacebookTwitterInstagramPinterestLinkedInGoogle+YoutubeRedditDribbbleBehanceGithubCodePenWhatsappEmail