lotto 6 aus 45, doppelte zahlen vermeiden

Code:
int zahlen[45];
for (int i=0; i<45; i++){zahlen[i]=i+1;}
srand(time(NULL));
for (int i=0; i<45; i++)
{
	int tausch = rand()%45;
	int buffer = zahlen[i];
	zahlen[i] = zahlen[tausch];
	zahlen[tausch] = buffer;
}

Wenn du jetzt die ersten 6 Werte aus zahlen[] ausliest, hast du deine Lottozahlen.
 
Zuletzt bearbeitet:
Ich darf mal gerade:

Die For-Schleife ist nichts anderes als eine Shuffle-Routine, d.h. das zuvor mit den 46 Zahlen gefüllte Array wird durcheinandergewürfelt.

Zeile 1 der Schleife ermittelt eine Zufallszahl zwischen 1 und 46. Der Inhalt des Arrays zahlen an der Stelle i wird in eine temporäre Variable buffer geschrieben, um ihn zu sichern (Zeile 2). Das Element des Arrays zahlen wird dann an der jeweiligen Stelle i durch das Element desselben Arrays an der Stelle der Zufallszahl ersetzt (Zeile 3). Schließlich wird das nun doppelt vorhandene Element an der Stelle der Zufallszahl durch die gesicherte Zahl ersetzt (Zeile 4).

Beispiel:

Schleife läuft zum ersten Mal -> i=0. Also:
  • Annahme: tausch = 20.
  • buffer = zahlen[0]
  • zahlen[0] = zahlen[20]
  • zahlen[20] = buffer
Ich hoffe das war jetzt mehr verständlich. Ist nichts anderes als ein Dreieckstausch.
 
Was ich aber nicht gutheißen kann, werter MasterOfTheDark, ist, dass Du an diesem kleinen Versuch, ein Lottospiel zu schreiben, nichts gelernt hast. Ganz ehrlich, Dein erster Versuch brachte nicht das erhoffte Ergebnis ( es war abzusehen, dass gleiche Zahlen auftreten können ) und mit den Tipps konntest Du nichts anfangen, weil Du scheinbar gar keine Lust hast, etwas dabei zu lernen. Sogar in Deinem ersten Versuch hast Du die 6 Zahlzüge nicht in Schleife realisiert, sondern "stümperhaft" hintereinanderkopiert. Nun hast Du eine Lösung, die Du nicht verstehst, geschweige denn selbst geschrieben hast. Schade.. mfg chmee

p.s.: Vielleicht seh ich es zu eng, und Du solltest nur für den gehassten Informatik-Unterricht eine Hausaufgabe präsentieren, naja, ist dann wohl geschafft.
 
In erster Linie sollte gezeigt werden, dass es eine einfache Lösung gibt und das es funktioniert. Das Verständnis stellt sich nach Erfolgen ein und aus positiven Erlebnissen lernt man. Ich denke, es bringt nichts, wenn man tagelang an einem kleinen Problem sitzt, denn das baut eher Frust auf. Ausserdem wurden mehrere (komplexe) Lösungsansätze vorgeschlagen (Arrays&Vektoren) und das kann einen Anfänger doch sehr überfordern!
Also alles einfach halten und wenn man dann noch Lust zum Experimentieren hat, kommt das Verständnis von alleine.

Schöne Grüße,
Willi
 
In erster Linie sollte gezeigt werden, dass es eine einfache Lösung gibt und das es funktioniert. Das Verständnis stellt sich nach Erfolgen ein und aus positiven Erlebnissen lernt man.
Ich würde es für mich allerdings eher nicht als Erfolg verbuchen, wenn mir jemand einfach die Lösung vorgibt. Mich würde es eher frustrieren auf die Lösung nicht selber gekommen zu sein, besonders wenn ich die vorgegebene Lösung noch nicht mal verstehe.
Ausserdem wurden mehrere (komplexe) Lösungsansätze vorgeschlagen (Arrays&Vektoren) und das kann einen Anfänger doch sehr überfordern!
Diese Konzepte (Arrays und Vektoren) sind beide gleichwertig und ich halte Arrays gerade für Anfänger für schwieriger als einen std::vector oder string, da diese dynamisch zu erweitern sind und sie ihre Größe selbst verwalten.
Also alles einfach halten und wenn man dann noch Lust zum Experimentieren hat, kommt das Verständnis von alleine.
Ja, dem stimme zu. Das erste Problem dürfte aber sein: Wie gehe ich vor wenn ich ein Programm schreiben will? Das lernt man nicht durch einfache Beispiele. Da ist es wichtig von Anfang an Programme zu strukturieren um die Komplexität möglichst gering zu halten. Allzu oft verstrickt man sich durch Schachtelung von Schleifen in der 6ten Ebene und obwohl der Code "relativ einfach ist" sieht man nicht mehr durch.

@MasterOfTheDark: Du hast jetzt eine Lösung. Allerdings schien dir ja mein Vorschlag 45 Elemente eines Vektors/Arrays/Strings/... in eine zufällige Reihenfolge zu bringen und dann die ersten 6 auszuwählen nicht zuzusagen und du wolltest anscheinend lieber 6 Elemente ohne Duplikate in ein Array speichern. Vielleicht verfolgst du ja dieses Ziel einfach weiter und versuchst diese Idee doch noch zu implementieren.

Gruß

PS: @RenderWilli: Es sollte nur 6 aus 45 sein, nicht 46.
 
OFFTOPIC

Die Erstanfrage wurde gestern gegen 16:48 gestellt. Heisst also, innerhalb von knapp 5 Stunden gab es 3 Lösungsansätze mit 2 funktionierenden Copy&Paste-Codes. Wenn es Interesse für das Coden gäbe, sollte man einem "Beginner" doch auch klar machen, dass Coding etwas mit Geduld und Tee zu tun hat und nicht mit (mein Eindruck:) Scriptkiddie&Copy&Paste.

Ich werde das Gefühl nicht los, dass Du, werter MasterOfTheDark eher nach einer schnellen Lösung und nicht nach einem Lernerfolg aus warst.

mfg chmee
 
Was ich aber nicht gutheißen kann, werter MasterOfTheDark, ist, dass Du an diesem kleinen Versuch, ein Lottospiel zu schreiben, nichts gelernt hast. Ganz ehrlich, Dein erster Versuch brachte nicht das erhoffte Ergebnis ( es war abzusehen, dass gleiche Zahlen auftreten können ) und mit den Tipps konntest Du nichts anfangen, weil Du scheinbar gar keine Lust hast, etwas dabei zu lernen. Sogar in Deinem ersten Versuch hast Du die 6 Zahlzüge nicht in Schleife realisiert, sondern "stümperhaft" hintereinanderkopiert. Nun hast Du eine Lösung, die Du nicht verstehst, geschweige denn selbst geschrieben hast. Schade.. mfg chmee

p.s.: Vielleicht seh ich es zu eng, und Du solltest nur für den gehassten Informatik-Unterricht eine Hausaufgabe präsentieren, naja, ist dann wohl geschafft.


mit dem Informatikunterricht liegst du richtig, allerdings ist er alles andere als gehasst, ich wusste hier einfach nicht weiter.

Lg Master

PS: danke an alle, die geholfen haben
 
Zurück