Ich nehme bei der Juniorstufe des Bundeswettbewerb Informatik teil. Dafür müssen 2 Aufgaben gelöst werden, in diesem Eintrag wird es um die erste gehen.
Aufgabe: Eine LVM (Lufballonverpackmaschine) hat 10 Fächer. Mit FACH(i) wird das i-te Fach in das Ausgabefach geleert und mit einer wechselnden Anzahl an Ballons wieder aufgefüllt. Mit VERPACKEN(i) wird das Ausgabefach nun geleert und verpackt. In einer Packung sollen mindestens 20, aber auch möglichst nicht mehr Ballons sein.
Für die Anzahl der Nachfüll-Ballons gibt es die ArrayList: Sie ist vergleichbar mit einer list aus Pyhton, im Grunde ein Array mit variabler Größe. Wichtig: Diese nimmt keine trivialen Datentypen entgegen. Man muss Wrapper-Datentypen wie
Wie geht der Alghorithmus vor? Er fängt mit dem Fach mit der größten Anzahl an Ballons an und prüft, ob er so auf 20 kommen kann. Kann er das mit der aktuellen Ballon-Sammlung nicht, probiert er die nächste aus.
Der wichtigste Codeblock ist die Methode tryout()
, diese hänge ich im Listing an.
public static boolean tryOut(Vmaschine vm) {
int greatestI = 0;
for (int i = 1; i < vm.lvm.length; i++){
if (vm.lvm[i] + vm.ausgabefach == 20) {
vm.fach(i); vm.pack();
return true;
}
else {
if (vm.lvm[i] < 20 - vm.ausgabefach && vm.lvm[i] > vm.lvm[greatestI]) {
greatestI = i;
}
}
}
if (greatestI != 0) {
vm.fach(greatestI);
tryOut(vm);
return true;
}
else {
return false;
}
}