Lotto zwei gleiche Zahlen verhindern



  • Hallo, ich habe ein kleines Programm, das mir zufällig die Zahlen von 1-49 rausspuckt. Die Zahlen speicher ich in ein Array.
    Jetzt möchte ich zwei gleich Zahlen verhindern. Kann mir jemand einen Tipp geben?

    Vielen Dank für Eure Antworten.
    Hiermal mein bisherige Code:

    #include <cstdlib>
    #include <iostream>
    #include <time.h>
    
    using namespace std;
    int i;
    int k;
    int a[10][10];
    
    int main(int argc, char *argv[])
    {
    
        srand((unsigned)time(NULL));
          for(i=1;i<7;i++){
            a[i][k]= rand()%48+1;
            cout << "Zahl" << i << " = " << a[i][k] << endl;
    
            }
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    


  • Asterix76 schrieb:

    Hallo, ich habe ein kleines Programm, das mir zufällig die Zahlen von 1-49 rausspuckt. Die Zahlen speicher ich in ein Array.
    Jetzt möchte ich zwei gleich Zahlen verhindern. Kann mir jemand einen Tipp geben?

    naja, du schaust einfach nach, ob die zahl schon im array drin ist. bei den wenigen lottozahlen ist das lauzeitmässig wohl akzeptabel.
    🙂





  • ~fricky schrieb:

    naja, du schaust einfach nach, ob die zahl schon im array drin ist. bei den wenigen lottozahlen ist das lauzeitmaessig wohl akzeptabel.
    🙂

    sollte man Algorithmen, deren Laufzeit lediglich vom Zufall abhaengt nicht eigentlich vermeiden?

    pack alle moeglichen Werte schoen sortiert in ein Array, lass ein random_shuffle drueberlaufen und schnapp dir dann die ersten 6 Elemente des Arrays



  • zwutz schrieb:

    sollte man Algorithmen, deren Laufzeit lediglich vom Zufall abhaengt nicht eigentlich vermeiden?

    da hast du auch wieder recht.

    zwutz schrieb:

    pack alle moeglichen Werte schoen sortiert in ein Array, lass ein random_shuffle drueberlaufen und schnapp dir dann die ersten 6 Elemente des Arrays

    oder, um dem original näher zu kommen: shuffle, einen rausnehmen, shuffle, einen rausnehmen, usw. bis man genug hat.
    🙂



  • zwutz schrieb:

    ~fricky schrieb:

    naja, du schaust einfach nach, ob die zahl schon im array drin ist. bei den wenigen lottozahlen ist das lauzeitmaessig wohl akzeptabel.
    🙂

    sollte man Algorithmen, deren Laufzeit lediglich vom Zufall abhaengt nicht eigentlich vermeiden?

    pack alle moeglichen Werte schoen sortiert in ein Array, lass ein random_shuffle drueberlaufen und schnapp dir dann die ersten 6 Elemente des Arrays

    Performance ist hier irrelevant.
    und random_shuffle gibts in C nicht.

    Eine Möglichkeit ist alle Zahlen in ein Array zu schreiben und die gezogene Zahl aus dem array herauszunehmen.



  • Shade Of Mine schrieb:

    und random_shuffle gibts in C nicht.

    ich bin mir nicht mehr sicher, aber irgendwer hat mal behauptet, man könne in C auch selbst was programmieren.
    🙂



  • Hab dazu mal kurz was gebaut. Nur sehr oberflächlich getestet, hat bestimmt noch massig Fehler drin ⚠

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    static inline double uniform_deviate ( int seed, int r_max ) {
        return seed * ( 1.0 / ( r_max + 1.0 ) );
    }   
    
    void random_shuffle (void *base, size_t nmemb, size_t size, int (*rand)(void), int r_max) {
        size_t n = nmemb;
        unsigned char *bas = base;
        while (n > 1) {
            int k = uniform_deviate (rand (), r_max) * n--;
            unsigned char tmp[size];
            memcpy (tmp, bas + n*size, size);
            memcpy (bas + n*size, bas + k*size, size);
            memcpy (bas + k*size, tmp, size);
        }
    }
    
    int main (void) {
        double arr[10] = {0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 8.1, 9.1};
    
        srand (time(NULL));
    
        random_shuffle (arr, sizeof arr / sizeof *arr, sizeof *arr, rand, RAND_MAX);
    
        for (int i=0; i<10; i++) {
            printf ("%f\n", arr[i]);
        }
    
        return 0;
    }
    


  • ~fricky schrieb:

    Shade Of Mine schrieb:

    und random_shuffle gibts in C nicht.

    ich bin mir nicht mehr sicher, aber irgendwer hat mal behauptet, man könne in C auch selbst was programmieren.
    🙂

    Danke. 😃 👍


Anmelden zum Antworten