C :: Aufgabe #3 :: Lösung #1
4 Lösungen

#3
Lotto - Simulation - 6 aus 49
Anfänger - C
von Gustl
- 25.11.2012 um 16:16 Uhr
Schreiben Sie ein Programm, welches 6 Zahlen zwischen 1 und 49 abfrägt. Danach soll das Programm solange 6 Zufallszahlen berechnen bis alle 6 eingegebenen Zahlen übereinstimmen. Natürlich darf eine Zahl nicht zweimal vorkommen.
Dann soll ausgegeben werden nach wie vielen "Spielen" ein 6er erzielt wurde und wie hoch die Chance auf einen 3er, einen 4er und einen 5er war.
Dann soll ausgegeben werden nach wie vielen "Spielen" ein 6er erzielt wurde und wie hoch die Chance auf einen 3er, einen 4er und einen 5er war.
#1

von devnull (8870 Punkte)
- 03.07.2013 um 19:23 Uhr

/**************************************** * lotto.c Lotto 6 aus 49 * * OS : GNU/Linux * compile: gcc -Wall -o lotto lotto.c * * devnull 03-07-2013 ****************************************/ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <time.h> /*typedef unsigned int uint;*/ /* Zahl im Array? */ int ismember( uint *pa, uint n ) { int i; for (i=0;i<6;i++,pa++) { if (*pa == n) return 1; } return 0; } /* Zaehlen Richtige */ int count_matches( uint *pdraw, uint *pmark ) { int i,nm; for (i=0,nm=0;i<6;i++,pdraw++) { if (ismember(pmark,*pdraw)) nm++; } return nm; } /* Lotozahlen "ankreuzen" */ int do_mark( uint *pmark ) { uint* pm=pmark; int m=0,num=0,req=0; char snum[8]; do { do { printf(" %d. Zahl: ", m+1 ); scanf( "%s", snum ); req++; num=atoi(snum); if (num < 1 || num >49) { printf( "Zahl muss im Bereich 1..49 liegen!\n" ); num=0; } } while (num==0); if (ismember(pmark,num)) printf( "Zahl wurde bereits eingegeben!\n" ); else { *pm++=num; m++; } } while (m<6); return req; } /* Lottozahlen ziehen */ int do_draw( uint *pdraw ) { uint* pd=pdraw; int m=0,num=0,rnd=0; do { num = rand()%49 + 1; rnd++; if (!ismember(pdraw,num)) { *pd++=num; m++; } } while (m<6); return rnd; } /* main */ int main( int argc, char **argv ) { uint draw[6]; /* Zahlen einer Ziehung */ uint mark[6]; /* Zahlen eines Tipps */ uint cntm[7]; /* Zahlenhaeufigkeiten */ uint cdraw=0; int cm,n; memset( draw,0,6*sizeof(int)); memset( mark,0,6*sizeof(int)); memset( cntm,0,7*sizeof(int)); /* Tipp abgeben */ do_mark( mark ); printf("Ihr Tipp: "); for (n=0;n<6;n++) printf("%d ", mark[n]); printf("\n"); /* Seed Zufallsgenerator */ srand(time(NULL)); /* Ziehungen bis 6 Richtige */ do { do_draw( draw ); cdraw++; cm=count_matches(draw,mark); cntm[cm]++; if (cdraw%1000000==0) fprintf(stderr,"."); } while (cm<6); /* Ergebnis */ printf("\nAnzahl Ziehungen: %d\n",cdraw); printf( "Treffer Anzahl Häufigkeit[%%]\n" ); for (n=0;n<=6;n++) printf("%4d %-10d %9.6f\n", n,cntm[n],(100.*cntm[n])/cdraw); return 0; }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1