Ako vygenerovať N rôznych náhodných čísel?

Funkciou môže byť napríklad rand () alebo random () na generovanie náhodných čísel
Funkciou môže byť napríklad rand () alebo random () na generovanie náhodných čísel a random () alebo srandom () na generovanie generátora náhodných čísel.

Ak ste programátor, obzvlášť ak radi tvoríte hry, budete potrebovať spôsob, ako generovať náhodné čísla, ktoré sa navzájom líšia. Ak máte napríklad balíček kariet a potrebujete 3 rôzne karty, budete potrebovať 3 rôzne náhodné čísla. 3 náhodné čísla nebudú fungovať, pretože môžu byť náhodné, ale identické. V tomto článku použijete pseudokód; inštrukcie by mali byť životaschopné pre akýkoľvek programovací jazyk.

Kroky

  1. 1
    Zistite, či má váš programovací jazyk náhodnú funkciu a funkciu na generovanie generátora náhodných čísel. Funkciou môže byť napríklad rand () alebo random () na generovanie náhodných čísel a random () alebo srandom () na generovanie generátora náhodných čísel. Väčšina moderných jazykov to robí a funkcie rand () alebo random () zvyčajne vracajú racionálne hodnoty od 0 do 1.
  2. 2
    Naočkujte najskôr generátor náhodných čísel, aby ste pri každom spustení nedostali rovnaký zoznam čísel. Na zavedenie generátora náhodných čísel musíte do funkcie srand vložiť celé číslo. Príklad: 'srand ((unsigned int) time (0))'. Od 1. januára 1970 by uplynulo niekoľko sekúnd.
  3. 3
    Urobte z neho celé číslo vynásobením výsledku najvyššou hodnotou a zaokrúhlením výsledku. Ak chcete napríklad získať náhodné číslo od 0 do 50, zadajte: random ()% 50.
  4. 4
    Pochopte, že aby boli všetky čísla odlišné, vytvoríte slučku, kým nezískate toľko čísel, koľko by ste mohli potrebovať, a potom výsledky uložte a skontrolujte, či sa neopakujú:
    funkcia random_numbers (int howmany, int maxlimit) {int ret_array [howmany] // Toto je pole, do ktorého budete ukladať generované čísla srand ((unsigned int) time (0)) // seed generátora náhodných čísel while (ret_array. size () <howmany) {int rnd = random ()% maxlimit // Generate an int random number between 0 and "maxlimit" if (! includes (ret_array, rnd)) {ret_array.push (rnd) // You are going uložiť iba tie čísla, ktoré nepatria do poľa}} vrátiť ret_array} 
    Budete potrebovať 3 rôzne náhodné čísla
    Ak máte napríklad balíček kariet a potrebujete 3 rôzne karty, budete potrebovať 3 rôzne náhodné čísla.
  5. 5
    Program, ktorý „obsahuje“ funkciu:
    • funkcia obsahuje (int array [], int number) {for (int i = 0; i <array.size (); i) {if (array [i] == number) {return true}} return false} 
    • Opakujte toľkokrát, koľkokrát je to potrebné, aby ste pole vyplnili rôznymi číslami. Pri každom náhodnom čísle skontrolujeme, či je už v poli. Ak nie je, potom ho zatlačíme dovnútra, v opačnom prípade ho len zacyklíme a skúsime to znova s iným číslom.

Tipy

  • Existuje mnoho spôsobov, ako to dosiahnuť rýchlejšie, ale závisí to od programovacieho jazyka, ktorý používate. Napríklad v. NET Framework máte triedu Zoradený zoznam. Môžete tam uložiť čísla a potom vytvoriť funkciu „obsahuje“ pomocou binárneho vyhľadávania, ktoré je oveľa rýchlejšie.

Varovania

  • Čísla generované náhodne () n nie sú skutočne náhodné, sú pseudonáhodné. Ako také nie sú vhodné pre zabezpečené aplikácie.
  • Uistite sa, že zoznam jedinečných pseudonáhodných čísel je skutočne to, čo potrebujete. Ak napríklad miešate balíček kariet, existujú algoritmy napísané špeciálne na tento účel (a môžu vykonávať lepšiu prácu).
FacebookTwitterInstagramPinterestLinkedInGoogle+YoutubeRedditDribbbleBehanceGithubCodePenWhatsappEmail