56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
#include "fcpp.hh"
|
|
|
|
int nennwert (int nr) {// Muenzart -> Muenzwert
|
|
if (nr==1) return 1; if (nr==2) return 2;
|
|
if (nr==3) return 5; if (nr==4) return 10;
|
|
if (nr==5) return 50;
|
|
return 0;
|
|
}
|
|
|
|
struct Arg { // Stapelelemente
|
|
int betrag; // das sind die Argumente der
|
|
int muenzarten; };// rekursiven Variante
|
|
|
|
const int N = 1000; // Stapelgroesse
|
|
|
|
int wechselgeld2 (int betrag) {
|
|
Arg stapel[N]; // hier ist der Stapel
|
|
int i=0; // der "stack pointer"
|
|
int anzahl=0; // das Ergebnis
|
|
int b,m; // Hilfsvariablen in Schleife
|
|
|
|
stapel[i].betrag = betrag; // initialisiere St.
|
|
stapel[i].muenzarten = 5; // Startwert
|
|
i = i+1; // ein Element mehr
|
|
|
|
while (i>0) { // Solange Stapel nicht leer
|
|
i = i-1; // lese oberstes Element
|
|
b = stapel[i].betrag;// lese Argumente
|
|
m = stapel[i].muenzarten;
|
|
|
|
if ( b==0 )
|
|
anzahl = anzahl+1; // Moeglichkeit gefunden
|
|
else if ( b>0 && m>0 ) {
|
|
if (i>=N) {
|
|
print("Stapel zu klein");
|
|
return anzahl;
|
|
}
|
|
stapel[i].betrag = b; // Betrag b
|
|
stapel[i].muenzarten = m-1;// mit m-1 Muenzarten
|
|
i = i+1;
|
|
|
|
if (i>=N) {print("Stapel zu klein"); return anzahl;}
|
|
stapel[i].betrag = b-nennwert(m);
|
|
stapel[i].muenzarten = m; // mit m Muenzarten
|
|
i = i+1;
|
|
}
|
|
}
|
|
|
|
return anzahl; // Stapel ist jetzt leer
|
|
}
|
|
|
|
int main () {
|
|
print(wechselgeld2(300));
|
|
}
|
|
|