VL-Programmieren/S01-VL04-Aufgabe 5/Aufgabe.java

74 lines
2.5 KiB
Java
Raw Normal View History

2023-12-05 14:38:37 +00:00
class Aufgabe {
public static void main(String[] args) {
final int RECHTS = 1;
final int LINKS = 0;
final int NUM_FROESCHE = 100000;
// Neuer Frosch startet bei Feld 1.
int position = 1;
int position_max = 0;
// Es gibt zwei Eimer in welchen ein Frosch landen kann.
// Eimer bei Index 0 ist der linke Eimer.
// Eimer bei Index 1 ist der rechte Eimer.
int[] eimer = {0, 0};
// Auf der Zahlengerade springt der aktuelle Frosch.
// Das Feld 0 ist bereits ein Eimer (der rechte Eimer).
// Wenn der Frosch den Index auf der linken Seite verlässt springt er in den linken Eimer.
int[] zahlengerade = new int[1000];
// Die Zahlengerade wird initialisiert. Am Anfang zeigen alle Felder nach rechts.
// 0 = Frosch springt nach links.
// 1 = Frosch springt nach rechts.
for(int i = 0; i < zahlengerade.length; i++) {
zahlengerade[i] = RECHTS;
}
// Schleife mit welcher alle Frösche durchlaufen werden.
// Es ist immer nur ein Frosch auf der Zahlengerade unterwegs.
for(int anzahl_froesche = NUM_FROESCHE; anzahl_froesche > 0; anzahl_froesche--) {
position = 1;
// Der Frosch bewegt sich so lange auf der Zahlengerade bis dieser in einen Eimer fällt.
// Es steht ein Eimer auf Index 0 und Index -1.
while(position > 0) {
// Wenn der Frosch das Feld berüht ändert sich die Richtung des Felds.
zahlengerade[position] = (zahlengerade[position] == RECHTS) ? LINKS : RECHTS;
// Je nach Richtung muss der Frosch jetzt springen.
if (zahlengerade[position] == RECHTS) {
position += 1;
// Die maximale Position soll gespeichert werden.
if (position_max < position) {
position_max = position;
}
} else {
// Der Frosch soll nach links springen.
// Er könnte jetzt in einen Eimer springen.
if (position == 1) {
// Der Frosch springt in den linken Eimer.
eimer[0]++;
} else if (position == 2) {
// Der Frosch springt in den rechten Eimer.
eimer[1]++;
}
// Der Frosch springt nach links (evtl. in einen Eimer).
position -= 2;
}
}
}
// Ausgabe der wichtigsten Informationen.
System.out.printf("Linker Eimer (Index -1): %d Frösche\n", eimer[0]);
System.out.printf("Rechter Eimer (Index 0): %d Frösche\n", eimer[1]);
System.out.printf("Maximale Position auf der Zahlengerade: %d\n", position_max);
}
}