Java :: Aufgabe #209
3 Lösungen
Durchnummerierung aller möglichen geordneten Ziehungsergebnisse bei 6 aus 49
Anfänger - Java
von hollst
- 06.09.2018 um 10:28 Uhr
Beim Lotto 6 aus 49 gibt es bekanntlich 13.983.816 mögliche (geordnete) Ziehungsergebnisse (49 über 6).
Schreibe ein Programm, das jeder dieser Möglichkeiten eine natürliche Zahl zuordnet, also
1 2 3 4 5 6 -> 1
1 2 3 4 5 7 -> 2
...
...
44 45 46 47 48 49 -> 13.983.816
Viel Spaß!
Schreibe ein Programm, das jeder dieser Möglichkeiten eine natürliche Zahl zuordnet, also
1 2 3 4 5 6 -> 1
1 2 3 4 5 7 -> 2
...
...
44 45 46 47 48 49 -> 13.983.816
Viel Spaß!
Lösungen:
public static void main(String[] args) {
int[] zahlen = { 1, 2, 3, 4, 5, 6 };
long zaehler = 0;
DecimalFormat nf = new DecimalFormat();
while (true) {
zaehler++;
zahlen[5] = zahlen[5] + 1;
if (zahlen[5] > 49) {
zahlen[4] = zahlen[4] + 1;
zahlen[5] = zahlen[4] + 1;
}
if (zahlen[4] > 48) {
zahlen[3] = zahlen[3] + 1;
zahlen[4] = zahlen[3] + 1;
zahlen[5] = zahlen[4] + 1;
}
if (zahlen[3] > 47) {
zahlen[2] = zahlen[2] + 1;
zahlen[3] = zahlen[2] + 1;
zahlen[4] = zahlen[3] + 1;
zahlen[5] = zahlen[4] + 1;
}
if (zahlen[2] > 46) {
zahlen[1] = zahlen[1] + 1;
zahlen[2] = zahlen[1] + 1;
zahlen[3] = zahlen[2] + 1;
zahlen[4] = zahlen[3] + 1;
zahlen[5] = zahlen[4] + 1;
}
if (zahlen[1] > 45) {
zahlen[0] = zahlen[0] + 1;
zahlen[1] = zahlen[0] + 1;
zahlen[2] = zahlen[1] + 1;
zahlen[3] = zahlen[2] + 1;
zahlen[4] = zahlen[3] + 1;
zahlen[5] = zahlen[4] + 1;
}
if (zahlen[0] > 44) {
break;
}
System.out.println(Arrays.toString(zahlen) + " -> " + nf.format(zaehler));
}
System.out.println(zaehler);
}
import java.util.Arrays;
public class lotto {
//Nummern der Lottozahl-Stelle
int eins = 1;
int zwei = 2;
int drei = 3;
int vier = 4;
int fuenf = 5;
int sechs = 6;
// Zahl von der aus die Zahlenfolge fortgeführt wird
int einsc = 1;
int zweic = 1;
int dreic = 2;
int vierc = 3;
int fuenfc = 4;
int sechsc= 5;
int zaehler = 1;
void lottozieher() {
/** Jede Schleife führt die die Zahl an der jeweiligen Stelle immer weiter fort.
Anschließend wird die Mindestzahl der Stelle X um eins erhöht, um Verdopplungen zu vermeiden. */
for (eins = einsc; eins < 45; eins++) {
zweic++;
dreic = zweic;
for (zwei = zweic; zwei < 46; zwei++) {
dreic++;
vierc = dreic;
for (drei = dreic; drei < 47; drei++) {
vierc++;
fuenfc = vierc;
for (vier = vierc; vier < 48; vier++) {
fuenfc++;
sechsc = fuenfc;
for (fuenf = fuenfc; fuenf < 49; fuenf++) {
sechsc++;
for (sechs = sechsc; sechs < 50; sechs++) {
int[] zahlen = {eins, zwei, drei, vier, fuenf, sechs}; // Hier wird bei jedem Durchlauf das Array neu gefüllt und anschließend ausgegeben
System.out.println(Arrays.toString(zahlen) + zaehler);
zaehler++;
}
}
}
}
}
}
}
}
Mit Sicherheit nicht die schönste Variante aber es funktioniert.
Und hier die Treiberklasse:
public class treiber {
public static void main(String[] args) {
// TODO Auto-generated method stub
lotto lottofunktion = new lotto();
lottofunktion.lottozieher();
}
}
public class LottozahlenCounterApp {
public static void main(String[] args) {
int counter = 1;
for (int i1=1; i1<45; i1++) {
for (int i2=i1+1; i2<46; i2++) {
for (int i3=i2+1; i3<47; i3++) {
for (int i4=i3+1; i4<48; i4++) {
for (int i5=i4+1; i5<49; i5++) {
for (int i6=i5+1; i6<50; i6++) {
System.out.format("%d %d %d %d %d %d", i1, i2, i3, i4, i5, i6);
System.out.println(" -> " + counter);
counter++;
}
}
}
}
}
}
}
}
