Java :: Aufgabe #209

3 Lösungen Lösungen öffentlich

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ß!

Lösungen:

vote_ok
von max40 (60 Punkte) - 30.10.2018 um 20:05 Uhr
Quellcode ausblenden Java-Code
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);

}
vote_ok
von sienert (50 Punkte) - 07.11.2018 um 11:53 Uhr
Quellcode ausblenden Java-Code
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:

Quellcode ausblenden Java-Code
public class treiber {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		lotto lottofunktion = new lotto();
		lottofunktion.lottozieher();
		
	}

}
vote_ok
von guandi (170 Punkte) - 15.11.2018 um 15:47 Uhr
Quellcode ausblenden Java-Code
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++;
			               }
			            }
			         }
			      }
			   }
			}
	}
}