in c++ zufallszahlen ohne Dopplungen ...



  • Hi Leute bin neu hier und habe ein kleines Problemchen. Undzwar will ich in C++ Zufallszahlen generieren, aber es sollen keine doppelten zufallszahlen auftreten
    Hier ist mein bisheriger quellcode dazu :

    int x = rand() % (h);

    Also diese Anweisung ist in einer Zählschleife und soll mir immer andere Zufallszahlen ausgeben .

    Wenn einer wüsste wie man das realisieren könnte wär ich sehr dankbar für eine Antwort. 🙂

    achja "h" hab ich vorher auf 9 gesetzt . Also zufallszahlen von 0 bis 9 .

    Mehr über X also .... hmm also es geht sich um folgendes: Ich habe 3 Vektoren mit in denen Datensätze drinstehen. Jetzt habe ich einen 4. Vektor erstellt dessen erste 5 elemente zufällige Datensäze aus dem 1. der 3 Vektoren enthaltensollen die Nächsten 5 aus dem 2. Vektor und die letzten 5 aus dem 3. Vektor. In den 4. Vektor soll hat per zufall jeweilige datensätze reingeschrieben werden ... ich hoffe man das verstehen . Deshalb diese zufallszahlengeneration ...wenn 2 gleiche zahlen kommen in den ersten 5 zuweisungen , dann hab ich 2 gleiche Datensätze drin , das will ich nicht .

    So , für die anderen Tipps bin ich sehr dankbar 😃 ich werd sie gleich ausprobieren 🙂

    Danke an alle 😃 habe jetzt einfach ein int Array mit zahlen von 0 - 9 initialisiert und dann in einer for-schleife mit rand() gemischt .



  • http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

    Falls du nur die Zahlen 0 bis und mit 8 (also 0 bis 9) zufällig geordnet haben möchtest, dann geht das auch mit random_shuffle (Achtung Troll)

    std::array<int, 9> arr; int tmp=0;
    std::generate(arr.begin(), arr.end(), [&](){return tmp++;});
    std::random_shuffle(arr.begin(), arr.end());
    std::copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout, "\n"));
    




  • Feuerpinsel schrieb:

    Also diese Anweisung ist in einer Zählschleife und soll mir immer andere Zufallszahlen ausgeben .

    Wenn einer wüsste wie man das realisieren könnte wär ich sehr dankbar für eine Antwort. 🙂

    achja "h" hab ich vorher auf 9 gesetzt . Also zufallszahlen von 0 bis 9 .

    ganz einfach. ein integer array mit zahlen von 0 bis 9 initialisieren und dann per rand mischen.
    dann kannst du 10 verschiedene zahlen aus dem array entnehmen.



  • xyz uu yeah schrieb:

    Feuerpinsel schrieb:

    Also diese Anweisung ist in einer Zählschleife und soll mir immer andere Zufallszahlen ausgeben .

    Wenn einer wüsste wie man das realisieren könnte wär ich sehr dankbar für eine Antwort. 🙂

    achja "h" hab ich vorher auf 9 gesetzt . Also zufallszahlen von 0 bis 9 .

    ganz einfach. ein integer array mit zahlen von 0 bis 9 initialisieren und dann per rand mischen.

    Wieso nicht random_shuffle ?
    Das wurde, wie ein Vorposter schon geschildert hat, genau dafür entworfen.

    :xmas2:


  • Mod

    Sone schrieb:

    Wieso nicht random_shuffle ?

    Er hat ja nicht gesagt, wie gemischt wird 🙂 .



  • xyz uu yeah schrieb:

    und dann per rand mischen.

    Ja, wie denn? "per rand mischen" ist nicht so einfach wie es sich anhört. Dafür nimmt man entweder random_shuffle oder man implementiert es mit Fisher–Yates, dazu siehe meinen Link.

    Danke Sone, dass du hier gepostet hast, jetzt kann ich deine Signatur quoten:

    You want to do X, and you think Y is the best way of doing so. Instead of asking about X, you ask about Y.

    Dieses Problem liegt hier nämlich vor. Um es als Ratschlag zu formulieren:

    You want to do X, and you think Y is the best way of doing so. Instead of asking about Y, better ask about X.

    Hier:
    X=unbekannt (Array mischen? Lottozahlen ziehen?)
    Y=rand()%h in Zählschleife.

    Also, Feuerpinsel: Bitte erzähle uns mehr über X.


Anmelden zum Antworten