Also bezüglich der Problematik der möglichen Neuziehung falls die Zahl schon gezogen wurde, gibt es aus meiner Sicht zwei Lösungen (So man die Problematik als n aus m auffasst und nicht als 6 aus 49):
a) Man kann den Algorithmus so abwickeln, wie es eben auch wirklich abläuft. Ich habe ein Array von verfügbaren Zahlen. In dem Beispiel eben 49 Stück. Wenn eine Zahl gezogen wurde, dann muss diese verschwinden und der Pool ist um eins kleiner. Dies ist z.B. mit einem Array lösbar. Am Anfang werden die Felder von 1 bis 49 gefüllt. Wenn eine Zahl gezogen wurde, wird die letzte Zahl im Array an die Stelle der gezogenen Zahl gelegt und dann die Hintere Grenze um eins verringert. Die nächste Zufallszahl ist dann halt nur noch von 1 - 48 weil ja nur noch 48 Zahlen zur Auswahl stehen.
Und wenn Du nur 6 Zahlen ziehen willst, reicht doch ein Array von 6 aus, um dann eben die 6 Zahlen zu speichern. So muss man eben nicht über ein großes Array gehen um alle gezogenen Zahlen zu finden.
b) Wenn man den Algorithmus n aus m wirklich durch überprüfen der bereits gezogenen Zahlen ermitteln möchte, dann ist das auch kein so großes Problem. Bei n aus m prüft man dann on b > m/2 ist. Ist dies der Fall, dann würde ich nicht mehr n Zahlen ermitteln, die gezogen wurden sonden die m-n Zahlen, die nicht gezogen wurden.
So wäre bei 48 aus 49 (nur als Beispiel) nur noch eine Zahl zu ermitteln.
Aber hier entfernt man sich dann von der "Lotto"-Aufgabe und implementiert etwas eigenes. Solch eine Abweichung mag manchmal sinnvoll sein, weil man so ggf. Performance-Probleme verhindert aber diese Notwendigkeit sehe ich hier nicht. Ich würde bei einem Code-Review schlicht fragen, was der Entwickler hier gemacht hat. Die eigentliche Aufgabe war ja erst einmal eine andere (Das Lotto-System ist halt als Aufgabe angegeben worden.)
Mit den besten Grüßen,
Konrad