Lottostatistik

CDW

0
Mitarbeiter
Eingereicht von pi()


Es handelt sich um ein Lotto-Programm.Man kann am Anfang seinen Tipp eingeben und dann wie viele Lottoscheine (Durchläufe) man haben will.Als Ergebnis sollte eine Statistik herauskommen, die wie folgt aussehen sollte:

Statistik:
nieten:3455140
einser:3404654
zweier:1134126
dreier:157049
vierer:8840
fünfer:191
sechser:0

Es dürfen natürlich auch Zahlen doppelt getippt werden und Die Reihenfolge spielt keine Rolle.
In diesem Fall habe ich 8160000 Durchläufe gemacht (~Anzahl Österr. Einwohner) und Lotto 6 aus 45 (Österreichisches Lotto, da weniger Einwohner).Ihr könnt es natürlich deutsch machen (oder so wie er es in dem Land woher der jeweilige Programmierer kommt eben hat mit den Einwohnern und der Wahrscheinlichkeit.
 
Es sollen also keine Wahrscheinlichkeiten ausgerechnet werden ?
Nur z.B. ne while Schleife machen und solange Zahlen ziehen bis alle Lotto-Scheine benutzt wurden sind ?
 
In Österreich gibt es dann auch noch die Zusatzzahl. Außerdem sollte man gleich eingeben können wieviele Personen einen Lotteschein kaufen. Nicht jeder Österreicher kauft einen, manche dafür gleich 10^^
 
Da sich der Aufgabeneinsender nicht meldet:

So wie ich die Aufgabe verstehe, sollte man das ganze für einen Tipp simulieren. Da spielt es keine Rolle, wieviele den Schein kaufen ;)

Ich würde sagen, man könnte eigentlich die vollständigen Regeln simulieren (Zusatzzahl etc). Also: Benutzer gibt seinen Tipp ab und wie viele Ziehungen simuliert werden sollten - das Programm gibt dazu ein paar Statistiken aus. Dabei sollte man nicht mit Wahrscheinlichkeiten rumrechnen sondern einfach mal jede Ziehung wirklich simulieren ;).
 
da keiner was macht hab ich mal schnell was zusammengebaut...

extrem hässlich und lang, aber ich bin ja noch anfänger ;)

Code:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {

  srand (time(NULL));

  cout << "\t\tL O T T O\n\n";

  int tip[6];
  for (int i=0;i<=5;i++) {
    do {
      cout << "Tip " << i+1 << "/6 eingeben: ";
      cin >> tip[i];
    } while (tip[i] < 1 || tip[i] > 49);
  }

  cout << "\nDurchlaeufe eingeben: ";
  int d;
  cin >> d;

  int ziehung[6];
  int zaehler;
  int _0=0,_1=0,_2=0,_3=0,_4=0,_5=0,_6=0;

  for (int i=0;i<=(d-1);i++) {
    zaehler=0;
    for (int i=0;i<=5;i++) {
      ziehung[i] = rand() % 50;
      for (int j=0;j<=5;j++) {
        if (tip[j] == ziehung[i])
          zaehler++;
      }
    }
    switch (zaehler) {
      case 0: _0++; break;
      case 1: _1++; break;
      case 2: _2++; break;
      case 3: _3++; break;
      case 4: _4++; break;
      case 5: _5++; break;
      case 6: _6++; break;
    }  
  }

  cout << "\nNieten:  " << _0
       << "\nEinser:  " << _1
       << "\nZweier:  " << _2 
       << "\nDreier:  " << _3  
       << "\nVierer:  " << _4
       << "\nFuenfer: " << _5 
       << "\nSechser: " << _6 <<endl;

  cout << "\nby toor.910 ~ Habo 09.06.07 21:50";

  system("PAUSE>NUL");
  return 0;
}

lotto.rar --> reihenfolge berücksichtigt
lotto2.rar --> reihenfolge nicht berücksichtigt
 
So, sry, ich wusste noch nicht, dass meine Aufgabe schon on ist.(Danke)
CDW hat es schon richtig erklärt, also gibt es dazu eigenltich nichts zu sagen.
Happy coding!

PS: Achja sry, die Anzahl der Durchläufe entspricht logischerweise der Anzahl der Ziehungen, nicht der Lottoscheine.
 
Man kann am Anfang seinen Tipp eingeben und dann wie viele Lottoscheine (Durchläufe) man haben will.

Bei toor.910 ist es so implementiert, dass man die gleichen Zahlen halt beliebig oft anwendet. (also die Anzahl der Durchläufe)
Dies ist vorallem für Leute interessant die jede Woche den gleichen Tipp spielen und wissen wollen nach wievielen Wochen sie gewinnen werden.

Ich dachte mir das zuerst anders. Nämlich so: Jeder Österreicher spielt Lotte mit zufälligen Zahlen (Quicktipp) und das Programm soll simulieren wieviele Personen einen 3er,4er,5er, 5er mit Zusatzzahl oder 6er haben.
 
So habe das ganze auch mal realisiert.
Ist in C geschrieben, jedoch ohne Zusatzmöglichkeiten wie Spiel77 oder was es da noch gibt. Da mache ich mich vielleicht später mal ran ^^
Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int tipp[6];
    int null = 0, eins = 0, zwei = 0, drei = 0, vier = 0, fuenf = 0, sechs = 0;
    int lotto[6];
    int gesamt, ziehen;
    int i, x, z;

    
    printf("Wie häufig soll gezogen werden ?\n");
    scanf("%d", &ziehen);
    
    // 6 Zahlen holen 
    for (i = 1; i <= 6; i++) 
    {
        do
        {
              printf("Ihr %d. Tipp: \n", i);
              scanf("%d", &tipp[i]);
              
        } while (tipp[i] < 0 || tipp[i] > 49); 
    }
    // end 6 Zahlen holen    
    
    // durchläufe simulieren
    for (x = 1; x <= ziehen; x++)
    {
        gesamt = 0;
        for (i = 1; i <= 6; i++)
        {
            lotto[i] = 1+(int) (50.0*rand()/(RAND_MAX+1.0)); // bis 50 da 50 exklusive gilt
    
        for (z = 1; z <= 6; z++)
            if (lotto[i] == tipp[z])// da die gezogene folge irrelevant ist muss jede kombination durchprobiert werden
                         gesamt++;      
        }
        
        switch (gesamt){
               case 0: null++;  break; 
               case 1: eins++;  break;
               case 2: zwei++;  break;
               case 3: drei++;  break;
               case 4: vier++;  break;
               case 5: fuenf++; break;
               case 6: sechs++; break; 
               
        }
    } 
    // end durchläufe simulieren 
    
    // Ausgabe
    printf("\nNieten:\t\t%d\n", null);
    printf("Einser:\t\t%d\n",   eins);
    printf("Zweier:\t\t%d\n",   zwei);
    printf("Dreier:\t\t%d\n",   drei);
    printf("Vierer:\t\t%d\n",   vier);
    printf("Fünfer:\t\t%d\n",   fuenf);
    printf("Sechser:\t%d\n",    sechs);
             
}
Danke an Xalon :)

Ich habs auchmal gezipt.

Mit freundlichen Grüßen

0wnZ
 
Hallo,

So, dann mal hier mein Code. Ich habe ehrlich gesagt etwa 2h dafür gebraucht. Bin noch Anfänger. Am meisten hatte mich ein Logikfehler im "Überprüfalgorhytmus", der untersucht ob die Zahl schon einmal gezogen wurde (oder ob eine 0 vorkommt), aufgehalten. Allerdings, ist mir noch nichts eingefallen, dies vollständig zu verhindern. Momentan zieht mein Programm in diesem Fall eine neue Zahl (was allerdings ja nicht heißt, dass die alte nicht drankommen kann). Morgen werde ich testen, ob ich das Problem mit einer While-Schleife umgehen kann.
Dass der Benutzer 2 mal die gleiche Zahl eingibt, wird auch geduldet. Imho sollte derjenige selber merken, wenn er einen Fehler macht (naja, aus Zeitgründen und Nichtwissen auch rausgelassen).
Die "Sonderspiele" (Zusatzzahl, Spiel77, etc.) muss ich auch noch implementieren.

Mein Programm:

Code:
#include <time.h>
#include <iostream>
using namespace std;


int main () {

int LottozahlenZiehung[6];
int LottozahlenBenutzer[6];
long int Ziehungen;
int n=0;
int a=0;
long int Treffer = 0;
long int Niete = 0;
long int Drei = 0;
long int Vier = 0;
long int Fuenf = 0;
long int Sechs = 0;
srand(time( NULL ));

cout << "Lottozahlen eingeben:" << endl;

for (int i=0; i<=5; i++) {
	cout << "Zahl " << i+1 << ": ";
	cin >> LottozahlenBenutzer[i];
}

cout << "Bestimme die Anzahl der Ziehungen: ";
cin >> Ziehungen; 

while (a<Ziehungen) {
a++;
Treffer = 0; 
for (n=0; n<=5; n++) { //Lottozahlen generieren
LottozahlenZiehung[n] = rand()%50;
   if (LottozahlenZiehung[n]==0) {LottozahlenZiehung[n] = rand()%50;} //Wenn die Zahl 0 ist, neue ziehen
   for (int x=n; x>0; x--) { 
      if(LottozahlenZiehung[n] == LottozahlenZiehung[n-x]) { //Wenn die Zahl gleich einer Vorgängerzahl ist, neue ziehen
         LottozahlenZiehung[n] = rand()%50; }} 

   for (int k=0; k<=5; k++) { //Lottozahlen mit gewaehlten Zahlen vergleichen
     if (LottozahlenBenutzer[k] == LottozahlenZiehung[n]) { Treffer++; } }  //Wenn richtig, dann 1 Treffer
   
   
}   
   switch (Treffer) {
	case 3: 
	   Drei++;
	   break;
	case 4:
	   Vier++;
           break;
        case 5:
	   Fuenf++;
	   break;
	case 6:
	   Sechs++;
           break;
        default:
	   Niete++; }
}

cout << "Nieten        : " << Niete << endl;
cout << "Drei Richtige : " << Drei << endl;
cout << "Vier Richtige : " << Vier << endl;
cout << "Fuenf Richtige: " << Fuenf << endl;
cout << "Sechs Richige:  " << Sechs << endl;

return 0;
}

Die Ausgabe sieht so aus:
Zahl 1: 23
Zahl 2: 21
Zahl 3: 43
Zahl 4: 40
Zahl 5: 33
Zahl 6: 2
Bestimme die Anzahl der Ziehungen: 80000000
Nieten : 78478366
Drei Richtige : 1436889
Vier Richtige : 82876
Fuenf Richtige: 1865
Sechs Richige: 4

Edit: Habe den Zufallsmechanismus nun so umgeschrieben, dass garantiert niemals die gleiche Zahl in einer Ziehung erscheint. Da der Logarhytmus ziemlich viele unnötige Durchläufe macht geht einiges an Rechenzeit verloren. Dafür ist das Ergebnis deutlich genauer (Wer einen Counter programmiert hat, der zählt, wie oft Zahlen in einer Ziehung mehrfach vorkommen, weiß wovon ich rede).
Wie man mit dem Hammer programmiert:
Code:
#include <time.h>
#include <iostream>
using namespace std;


int main () {

int LottozahlenZiehung[6];
int LottozahlenBenutzer[6];
long int Ziehungen;
int n=0;
int a=0;
long int Treffer = 0;
long int Niete = 0;
long int Drei = 0;
long int Vier = 0;
long int Fuenf = 0;
long int Sechs = 0;

srand(time( NULL ));

cout << "Lottozahlen eingeben:" << endl;

for (int i=0; i<=5; i++) {
	cout << "Zahl " << i+1 << ": ";
	cin >> LottozahlenBenutzer[i];
}

cout << "Bestimme die Anzahl der Ziehungen: ";
cin >> Ziehungen; 

while (a<Ziehungen) {
a++;
Treffer = 0;

   for (n=0; n<=5; n++) { //Lottozahlen generieren
   LottozahlenZiehung[n] = rand()%50;

      while (LottozahlenZiehung[n]==0) {LottozahlenZiehung[n] = rand()%50;} //Solange die Zahl 0 ist, neue ziehen
      
      for (int x=n; x>0; x--) { 
         for (int f=1; f<=5; f++) {
             for (int y=2; y<=5; y++) {
                for (int l=3; l<=5; l++) {
                   for (int e=4; e<=5; e++) {
                      for (int q=5; q<=5; q++) {
         while(LottozahlenZiehung[n] == LottozahlenZiehung[n-x] || LottozahlenZiehung[n] == LottozahlenZiehung[n-x-f] || LottozahlenZiehung[n] == LottozahlenZiehung[n-x-y] || LottozahlenZiehung[n] == LottozahlenZiehung[n-x-l] || LottozahlenZiehung[n] == LottozahlenZiehung[n-x-e] || LottozahlenZiehung[n] == LottozahlenZiehung[n-x-q]) { //Solange die Zahl gleich einer Vorgängerzahl ist, neue ziehen
         LottozahlenZiehung[n] = rand()%50;}}}}}}}

   for (int k=0; k<=5; k++) { //Lottozahlen mit gewaehlten Zahlen vergleichen
      if (LottozahlenBenutzer[k] == LottozahlenZiehung[n]) { Treffer++; } }  //Wenn richtig, dann 1 Treffer



   
}   
   switch (Treffer) {
	case 3: 
	   Drei++;
	   break;
	case 4:
	   Vier++;
           break;
        case 5:
	   Fuenf++;
	   break;
	case 6:
	   Sechs++;
           break;
        default:
	   Niete++; }
}

cout << "Nieten        : " << Niete << endl;
cout << "Drei Richtige : " << Drei << endl;
cout << "Vier Richtige : " << Vier << endl;
cout << "Fuenf Richtige: " << Fuenf << endl;
cout << "Sechs Richige : " << Sechs << endl;

return 0;
}

Was mich verwundert ist das Ergebnis. Sind die Chancen wirklich so gering bei 100 Ziehungen einen 3er zu bekommen? (also ziemlich 0?) Mal schaun was bei den 80.000.000 rauskommt. Geht noch ein Weilchen.
 
Original von CDW
Es dürfen natürlich auch Zahlen doppelt getippt werden[...]
Das hieße, dass du unbedingt zulassen musst, dass n-mal die gleiche Zahl gezogen werden kann.
Das mit dem Prüfen ob die Zahl 0 ist lässt sich auch einfach lösen, indem du einfach zu deiner zufälligen Zahl 1 zuaddierst.
Code:
LottozahlenZiehung[n] = 1 + (int) (50.0 * rand() / (RAND_MAX + 1.0));

PS: hab das bei mir im Code und im Code, der runterladbar ist geändert.

Mit freundlichen Grüßen

0wnZ

edit: ich sehe gerade, dass man das nicht so machen sollte wie ich es oben geschrieben hab ! :o
edit2: alles berichtigt ^^

Also für sauberen Quellcode das bitte ändern.
 
Original von 0wnZ
Das hieße, dass du unbedingt zulassen musst, dass n-mal die gleiche Zahl gezogen werden kann.
Beim Lotto ist das aber nicht so, auch wenn es in der Aufgabe so vorgegeben wird. Dies war nur eine Modifikation meinerseits, da ich die Aufgabe gelöst habe, sie allerdings noch etwas verfeinern wollte.

Für 80.000.000 lautet die Ausgabe:
Lottozahlen eingeben:
Zahl 1: 23
Zahl 2: 21
Zahl 3: 43
Zahl 4: 40
Zahl 5: 33
Zahl 6: 2
Bestimme die Anzahl der Ziehungen: 80000000
Nieten : 79993577
Drei Richtige : 6422
Vier Richtige : 1
Fuenf Richtige: 0
Sechs Richige : 0

Das verwundert mich doch sehr. Irgendwo muss ein Fehler sein
 
Hier mal österreichisches Lotte 6 aus 45.
Anmerkung: Keinerlei Fehlerüberprüfung bei der Zahleneingabe !


Code:
using System;
using System.Collections.Generic;
using System.Text;

namespace Lottozahlen
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Österreichisches Lotto (6 aus 45)");

            int nuller,einser,zweier,dreier,vierer,fuenfer,zusatz,sechser;
            nuller = einser = zweier = dreier = vierer = fuenfer = zusatz = sechser = 0;
            int[] randNumbers = {-1,-1,-1,-1,-1,-1,-1};// 6 + Zusatzzahl
            int[] userNumbers = new int[6]; 
            Random r = new Random();
            int rand=0;
            // keinerlei Fehlerprüfung
            Console.WriteLine("Bitte Ihre Glücksahlen eingeben !");
            int i,j,d;
            for(i=0;i<userNumbers.Length;i++)
            {
                Console.Write("Zahl" + i + ": ");
                userNumbers[i] = int.Parse(Console.ReadLine());
            }

            Console.WriteLine("Durchläufe: ");
            int rounds = int.Parse(Console.ReadLine());

            for (d = 0; d < rounds; d++)
            {
                for (j = 0; j < randNumbers.Length; j++)
                {
                    i = 0;
                    while (i <= j)
                    {
                        rand = r.Next(44) + 1; // Zahl zwischen 1 und 45
                        for (i = 0; i <= j; i++)
                        {
                            // prüfen ob zahl bereits gezogen wurde, also im pottich noch vorhanden ist
                            if (rand == randNumbers[i])
                                break;
                        }
                    }
                    randNumbers[j] = rand;
                }

                int type = 0;
                for (i = 0; i < randNumbers.Length - 1; i++)
                {
                    for (j = 0; j < userNumbers.Length; j++)
                    {
                        if (randNumbers[i] == userNumbers[j])
                        {
                            type++;
                        }
                    }
                }

                // prüfen auf zusatzzahl nur wenn fünf schon richtig sind
                if (type == 5)
                {
                    for (i = 0; i < userNumbers.Length; i++)
                    {
                        if (userNumbers[i] == randNumbers[randNumbers.Length - 1])
                            zusatz++;
                        else fuenfer++;
                    }
                }

                switch (type)
                {
                    case 0: nuller++; break;
                    case 1: einser++; break;
                    case 2: zweier++; break;
                    case 3: dreier++; break;
                    case 4: vierer++; break;
                    case 6: sechser++; break;
                }
            }

            Console.WriteLine("Ergebnisse (ab dreier gibts Geld)");
            Console.WriteLine("nuller: " + nuller);
            Console.WriteLine("einser: " + einser);
            Console.WriteLine("zweier: " + zweier);
            Console.WriteLine("dreier: " + dreier);
            Console.WriteLine("vierer: " + vierer);
            Console.WriteLine("fünfer: " + fuenfer);
            Console.WriteLine("fünfer mit zusatzzahl: " + zusatz);
            Console.WriteLine("sechser: " + sechser);
            Console.ReadKey();
        }
    }
}
 
Original von norm4n
Für 80.000.000 lautet die Ausgabe:
Lottozahlen eingeben:
Zahl 1: 23
Zahl 2: 21
Zahl 3: 43
Zahl 4: 40
Zahl 5: 33
Zahl 6: 2
Bestimme die Anzahl der Ziehungen: 80000000
Nieten : 79993577
Drei Richtige : 6422
Vier Richtige : 1
Fuenf Richtige: 0
Sechs Richige : 0

Das verwundert mich doch sehr. Irgendwo muss ein Fehler sein
Zu dem Ergebnis: ich weiß zwar nicht, was Du für einen Compiler benutzt hast, aber hier ist es eigentlich schon ganz gut erklärt:
http://members.cox.net/srice1/random/crandom.html
The ANSI C standard only states that rand() is a random number generator which generates integers in the range [0,RAND_MAX] inclusive, with RAND_MAX being a value defined in stdlib.h, and RAND_MAX being at least 32767. Note that 32767 isn't a very big number. If RAND_MAX is only 32767 then you can probably get only about 20,000 random numbers before the sequence starts to lose its randomness. Note that RAND_MAX may be larger. Check what the value of RAND_MAX is for you.
Das ganze ist auch auf C++ etc. Libs übertragbar - es werden nur so und so viele Zahlen "zufällig" geliefert, danach beginnt sich die Folge zu wiederholen.
In Deinem Fall (wahrscheinlich 32-bit seed value) würde ich auf 2^32 "random()" Aufrufe tippen, bevor das ganze wieder von Anfang an startet. d.h dass Du effektiv nur 4 Mrd Ziehungen durchführst.

Man könnte nun:
a) regelmäßig srand(time) aufurfen
b) "bessere" random Implementierungen suchen, diese haben aber oft den Nachteil, dass sie nicht so schnell arbeiten.
 
Programmiersprache: Python
Version: Lotto 6 aus 45, einmalige Zahl pro Ziehung, keine Zusatzzahl
MD5-Hash: 95a5076ac666af81dcd1c3742af1be42 (fragt nicht...Mir war halt langweilig und jetzt könnt ihr dann überprüfen ob ihr alles richtig kopiert habt. :D)

Code:
#! /usr/bin/env python
# -*- coding: UTF-8 -*- 

import random

# Some global things...
INTEGER_EXCEPTION = "Ungültiger Wert. Bitte geben Sie einen gültigen Integer-Wert an."

# Ermittle Durchläufe
while(True):
	try:
		rounds  = int(raw_input("Bitte Anzahl der Durchläufe angeben: "))
		break;
	except ValueError:
		print INTEGER_EXCEPTION
		
		
# Ermittle Tipp		
tip = []
treffer = []
stats = [0,0,0,0,0,0,0]
i = 0
while i < 6:
	try:	
		currentTip = int(raw_input("Bitte geben Sie ihren " +str(i+1)+ ". Tipp an: "))
		if currentTip not in tip:
			if currentTip < 1 or currentTip > 45:
				print "Sie haben zwar eine korrekte Zahl eingegeben, aber das ist Lotto 6 aus 45."
			else:
				tip.append(currentTip)
				i += 1
		else:
			print "Sie haben bereits auf " +str(currentTip)+ " getippt. \n"
	except ValueError:
		print INTEGER_EXCEPTION
		
for i in range(rounds):
	numbers = [0, 0, 0, 0, 0, 0];
	treff = 0;
	for j in range(6):
		chosen = random.randint(0,44)
		if chosen not in numbers:
			numbers[j] = chosen
		else:
			j -= 1
		if chosen in tip:
			treff += 1
	stats[treff] += 1
	
for i in range(len(stats)):
	print "Es gab " +str(stats[i])+ " " +str(i)+"er."

Zu erwähnen ist das ich Python wirklich gar nicht gut kann und das ganze deswegen wohl nicht wirklich perfomant ist. Aber naja ne Skriptsprache kann sowieso nicht so schnell sein. :D
 
In Deinem Fall (wahrscheinlich 32-bit seed value) würde ich auf 2^32 "random()" Aufrufe tippen, bevor das ganze wieder von Anfang an startet. d.h dass Du effektiv nur 4 Mrd Ziehungen durchführst.
4Mrd. würden ja reichen bei 80 Millionen Ziehungen*6 Zahlen. Ich glaube eher, dass der Fehler darin liegt, dass die x-y-z... Routine aus dem Array rausläuft und deswegen Probleme macht. Also wenn von einem Array[6] bei Array[1-5] steht, z.B.
 
Hi!


Ich hab mich auch mal dran gewagt( Tatarataaaa :D)

Code:
#include <cstdlib>
#include <iostream>

using namespace std;

bool used49[49];
int erg[7] = {0,0,0,0,0,0,0};
int akt[6] = {0,0,0,0,0,0};
int tip[6] = {-1,-1,-1,-1,-1,-1};
int trys = 0;
bool used[49];
int main(int argc, char *argv[])
{
    srand(time(0));
    printf("LOTTO-Stat\r\nWelche Tipps sollen abgegeben werden?\r\n");
    for(int i = 0; i < 6; i++){printf("%d:",i+1);while(tip[i]<1||tip[i]>49)scanf("%d",&tip[i]);}
    printf("\r\n\r\nWie oft soll gezogen werden?");
    scanf("%d",&trys);
    for(int i = 0; i < trys;i++)
    {
            for(int q = 0; q < 6; q++) {akt[q] = rand()%49+1;used[akt[q]-1]=true;}
            int match = 0;
            for(int q = 0; q < 6;q++){
                    for(int qq = 0; qq < 6; qq++) if(akt[q]==tip[qq]) match++;
                    }
            
            erg[match]++;
              if(i%1000000==0 &&i>=1000000) printf("%d000000\r\n",i/1000000);
            }
    printf("\r\n0er: %d\r\n1er: %d\r\n2er: %d\r\n3er: %d\r\n4er: %d\r\n5er: %d\r\n6er: %d\r\n",erg[0],erg[1],erg[2],erg[3],erg[4],erg[5],erg[6]);
    printf("ALSO:\r\nNieten: %d\r\n3er: %d\r\n4er: %d\r\n5er: %d\r\n6er: %d\r\n",erg[0]+erg[1]+erg[2],erg[3],erg[4],erg[5],erg[6]);
    for(int i = 0; i < 49; i ++) if(used[i]==false) printf("ALERT NR %d\r\n",i);
    system("PAUSE");
    return EXIT_SUCCESS;
}

Ich hab raus:

LOTTO-Stat
Welche Tipps sollen abgegeben werden?
1:49
2:48
3:47
4:46
5:45
6:44


Wie oft soll gezogen werden?80000000

(...)

ALSO:
Nieten: 77800585
3er: 1980855
4er: 206692
5er: 11613
6er: 255

Aber warum so viele 5er und 6er?!?

Ich glaub ich hab irgendwo ienen fehler ^^ :evil:


MfG

Altah hackah
 
Hallo!

diesmal eine Python Lösung

Code:
#!C:\Python2.5

import random

def getUserNums():
    nums = []
    while(len(nums) < 6):
        num = int(raw_input("Zahl "+ str(len(nums)+1) +": "))
        nums.append(num)
    return nums

def getNums():
    nums = range(1,50)
    while(len(nums) > 6):
        nums.remove(random.choice(nums))
    return nums

def evaluate(user, runs):
    loss = three = four = five = six = 0
    idx = hits = 0

    while(idx < runs):
        nums = getNums()
        hits = 0
        for i in user:
            for k in nums:
                if(i == k):
                    hits += 1

        if(hits == 3):
            three += 1
        elif(hits == 4):
            four += 1
        elif(hits == 5):
            five += 1
        elif(hits == 6):
            six += 1
        else:
           loss += 1
        idx += 1
    return "Drei Richtige: "+ str(three) +"\nVier Richtige: "+ str(four) +"\nFuenf Richtige: "+ str(five) +"\nSechs Richtige: "+ str(six) +"\nNieten: "+ str(loss)

if __name__ == "__main__":
    user = getUserNums()
    runs = int(raw_input("Anzahl Ziehungen: "))
    print "... Auswertung laeuft ..."
    print "-" * 21
    print "Getippt: "+ str(user)
    print "Ziehungen: "+ str(runs)
    print "-" * 21
    print evaluate(user, runs)

Gruß
Felix
 
Zurück
Oben