zufall



  • ich möchte zu hause lotto spielen :p
    und zwar gibt es eine ziehung 6 aus 6, jedoch ist die reihenfolge wichtig!
    und zwar habe ich dafür ein prog geschrieben, der bringt mir jedoch oft zwei gleich zahlen... 😕 ich weiss nicht warum?
    könntet ihr mir helfen?
    hier das prog.

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int a;
        int b;
        int c;
        int d;
        int e;
        int f;
    
        int array[]={1,2,3,4,5,6};
    
        srand(time(NULL));  //rand() erzeugt nur Pseudo-Zufallszahlen.
                            //Hier setze ich den Start-Wert von rand()
                            //Auf die aktuelle Zeit.
    
        a=rand() % 6 + 1;  //der Modulo-Operator % Gibt den Rest einer
                               //Ganzzahlen-Division zurück.
                               //Man teile(modulo) rand() durch 4 und addiere
                               //1, schon bekommt man ein Zahl von 1-4.
    
        b = array[1+(rand() % 1)];
        c = array[2+(rand() % 1)];
        d = array[3+(rand() % 1)];
        e = array[4+(rand() % 1)];
        f = array[5+(rand() % 1)];
        cout<<a;
        cout<<"\n";
        cout<<b;
        cout<<"\n";
        cout<<c;
        cout<<"\n";
        cout<<d;
        cout<<"\n";
        cout<<e;
        cout<<"\n";
        cout<<f;
        cout<<"\n";
    
        cin.get();
    
    }
    


  • btw: die zahlen 1 2 3 4 5 6 sollen alle genau ein mal vorhanden sein, und nicht doppelt.



  • e = array[4+(rand() % 1)];
    f = array[5+(rand() % 1)];
    

    rand()%1 liefert immer 0.

    versteh nicht so recht, warum du für a eine zufallszahl zwischen 1 und 6 "ziehst" und die restlichen 5 werte mit werten aus einem vordefinierten array belegst.



  • wie sollte ich es denn deiner meinung nach machen?
    so gehe ich der gefahr aus, dass die einzelnen zahlen sonst gleich sein könnten...
    ich bin offen für eine änderung 😃



  • Mach es so:

    unsigned int lottozahlen[ 49 ]; 
    size_t size = sizeof( lottozahlen ) / sizeof( unsigned int );
    
    for( int i = 0; i < size; ++i )
     lottozahlen[ i ] = i + 1;
    
    //Zufallsgenerator initialisieren
    srand( time( 0 ) );
    
    //Jetzt wird gemischt
    random_shuffle( lottozahlen, lottozahlen + size );
    
    //Zahlen ausgeben
    copy( lottozahlen, lottozahlen + 6, ostream_iterator< unsigned int >( cout, ' ' ) );
    

    Edit:

    Als Header benötigst du <algorithm>.



  • du willst eine ziehung 6 aus 6, es werden also immer alle 6 zahlen vorkommen. du musst also "nur" dein fertiges array permutieren, d.h. die reihenfolge irgendwie ändern.

    eine idee wäre, dass du die erste zahl mit rand()%6 aus dem array "ziehst" und es anschliessend um 1 "verringerst". die nächste zahl ziehst du mit rand()%5 usw.


Anmelden zum Antworten