Schwierigkeiten bei Münzproblem mit Backtracking
-
Hi Leute.
Es geht um folgende Aufgabe:
Es sollen alle Möglichkeiten gefunden und ausgegeben werden einen bestimmten Geldbetrag durch die Kombination gültiger Münzen darzustellen.Ich bin schon eine ganze Weile an dieser Aufgabe, bin mit meinem Latein aber nun aber am Ende.
Das ganze habe ich mit einer Klasse umgesetzt in der dann eine Funktion für die Zerlegung zuständig ist.
Als Ergebnis bekomme ich mit den unten angegebenen Werten zwei Kombinationen:0.1 0.2 0.1 0.1 0.1 0.2 0.2 Kombinationen: 2Wieso wird mir die Kombination mit 5 x 0.10 nicht angezeigt?
Was mache ich dabei falsch?Über einen kleinen Denkanstoß wäre ich dankbar.
Betrag = 0.50 AnzKombis = 0 AnzMuenzen = 2 muenzTypen[1] = 0.10 muenzTypen[2] = 0.20void zerlegung(int ebene,double betrag) { //Ausgabe der ermittelten Folge if(betrag == 0.00) { for(int i = 1;i < ebene; i++) cout<<folge[i]<<" "; cout<<endl; AnzKombis += 1; } //Prüfen welche Muenze in Betrag passt for(int i=1;i <= AnzMuenzen;i++) { if(betrag - muenzTypen[i] >= 0.00) { folge[ebene] = muenzTypen[i]; //rekursiver Aufruf der Funktion zerlegung(ebene + 1,betrag - muenzTypen[i]); } } }
-
Tipp: Rechne nicht mit Double. Zu ungenau.
Genauer: Rechne in Cent, also mit int. 0.5 - 0.1 - 0.1 -0.1 -0.1 -0.1 ist nun einmal nicht 0.0. So traurig das auch ist.
Ansonsten: Arrays beginnen bei 0, nicht bei 1. Solltest du entsprechend ändern, ist eine schlechte Angewohnheit die man schnell los werden sollte.
-
Fellhuhn
... Dank' dir!!!Läuft jetzt alles einwandfrei.