rand()



  • Hallo,
    ich suche eine möglichkeit, um über einen zufallsgenerator
    mehrer verschiedene Zahlen auszugeben.
    Diese dürfen aber nicht identisch sein.

    Danke



  • genau das macht rand() - es erzeugt bei jedem Aufruf eine neue Zufallszahl:

    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    using namespace std;
    
    int main()
    {
      srand(time(NULL));//einmal bei Programmstart
      for(int i=0;i<100;++i)
        cout<<i<<'\t'<<rand()<<endl;
      return 0;
    }
    


  • CStoll (off) schrieb:

    genau das macht rand() - es erzeugt bei jedem Aufruf eine neue Zufallszahl

    Aber die können durchaus identisch zu vorherigen sein.

    @ Caesar0808:
    Bleibt dir wohl nix anderes übrig als die Zufallszahlen zu merken und dann bei jeder neuen Zufallszahl zu überprüfen ob es die schon einmal gab.



  • Einmal kannst du es so machen, wie TactX vorgeschlagen hat. Dann beispielsweise mit einem std::set, um die Suchen zumindest halbwegs erträglich zu halten.

    Alternativ generierst du eine beliebig lange Zahlenfolge (z.b. die Zahlen von 1 - 100) in ein Array/Vektor und würfelst die dann mit random_shuffle durch.



  • Oder Variante c) man nimmt einen Zufallszahlengenerator der sich erst wiederholt wenn jede Zahl einmal dran war



  • Any schrieb:

    Oder Variante c) man nimmt einen Zufallszahlengenerator der sich erst wiederholt wenn jede Zahl einmal dran war

    Das ist nett. Aber wenn man nicht den gesamten Bereich des RNGs benutzen will bringt einem das leider nicht so viel.



  • CStoll (off) schrieb:

    genau das macht rand() - es erzeugt bei jedem Aufruf eine neue Zufallszahl:

    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    using namespace std;
    
    int main()
    {
      srand(time(NULL));//einmal bei Programmstart
      for(int i=0;i<100;++i)
        cout<<i<<'\t'<<rand()<<endl;
      return 0;
    }
    

    hi ich hab's so gemacht nur das ich anstatt i=0; i<100---> a =1; a<4 hab weil die zahl zwischen 1 und 3 sein soll...
    und anstatt cout<<... hab ich b = rand()
    wo geb ich den bereich ein (1-3) weil nur misst raus kommt...

    mfg
    Beasly



  • Hallo

    Wenn du Zahlen zwischen 1 und 3 erzeugen willst, musst du folgendes tun:

    int iZufallsZahl = rand()%3;  //bringt dir Zahlen zwischen 0 und 2
    

    Dann addiert du halt noch 1.

    Die Schleife dient nicht zur Begrenzung der Zufallszahlen, sondern nur der Begrenzung der Ausgabe.

    chrische


Anmelden zum Antworten