Python Programmieren?

3 Antworten

Du hast nen Tupel mit den Münzwerten, von groß nach klein. Du iterierst über die Münzwerte und machst dabei folgendes:

  • Ermittle wie oft die Münze in den Betrag passt.
  • Ziehe das PRodukt aus Münzert und Anzahl vom Gesamtbetrag ab
  • Wiederhole für alle Münzwerte

Praktisch ist in diesem Zusammenhang divmod(), weil es Dir die Subtraktion erspart.

Ich fange mal mit einem Lösungsansatz an - über Rekursion mit einer kleinen Erweiterung (ähnlich "branch and bound").

Grundgedanke der Rekursion:

minAnzahl(betrag) -> verfügbareMünzen.min(münze -> minAnzahl(betrag - münze.wert)) + 1

Dabei muss man noch dafür sorgen, dass minAnzahl für betrag = 0 auch 0 zurückgibt und für betrag < 0 "ungültig".

Damit funktioniert das Programm schon mal, ist aber sehr ineffektiv. Wesentlich besser ist es, eine "Map" mitzuschleppen, die die bisher berechneten Mindestanzahlen für bestimmte Beträge behält und "ungültig" zurückgibt, sobald diese Anzahl überschritten würde. Eine weitere Verbesserung wäre, die Münzen nach Wert absteigend zu ordnen und nur Münzen zuzulassen, deren Wert nicht größer ist als der Wert der zuletzt probeweise hinzugefügten Münze - auf die Reihenfolge der Münzen kommt es ja nicht an. Ob es möglich ist, alle Münzen mit einem kleineren Wert, als in den Restbetrag passt, unberücksichtigt zu lassen, müsste auf mathematischem Weg bewiesen werden.

Du musst eine Schleife programmieren, die, beginnend mit der größten Münze (2€) versucht ob der Betrag noch größer als der Münzwert ist. Falls ja, Münze merken, Wert abziehen.

Sobald das nicht mehr geht, Wert unter 2€, mit der nächst kleineren Münze (1€) fortfahren.

Woher ich das weiß:Hobby

mat22  19.03.2023, 20:11

Ich würde es mit modulo machen, da ich dort direkt die maximale und somit bestmögliche Menge einer Münze erhalte. Ansonsten ist das Vorgehen perfekt!

0
ArchBattle  19.03.2023, 21:01
@mat22

Nur eine Korrektur. Die "bestmögliche " Menge bekommt man mit einer Division, bei der man das Ergebnis abrundet. Mit Modulo bekommt man der Restbetrag um weiter zu rechen.

1