1 bis 100 Centbeträge Möglichkeiten/Kombinationen Algorithmus
-
Das Array sollte die oben genannten Werte für die Funktion "Anzahl" enthalten.
-
Sorry, ich verstehe's immer noch nicht.
Wie sieht bei dir konkret der Aufruf der Funktioncalc
aus?
-
Dieser Beitrag wurde gelöscht!
-
calc(s, n, [s,m1,m2,...,mn-1,mn]);
-
OK, statt der
0
(wie ich in meinem "Edit" schon geschrieben habe) übergibst du alsos
als ersten Wert im Array. Aber das ist genauso sinnlos (da vom Algorithmus niemals darauf zugegriffen wird unds
wird ja schon als 1. Parameter übergeben).
-
Nein, das ist nicht sinnlos, weil ich eine Kopie von s auf dem Stack brauche. Du kannst gerne versuchen das umzuschreiben, aber das von mir gezeigte ist IMHO die einfachste Variante in C. In einer Hochsprache würde es reichen einfach per Value nur das Array zu übergeben und immer die letzte Münze zu poppen.
-
Ich habe doch passenden Ideone-Code als Link angegeben.
Nenne mir doch einen Grund, warum auf den Summenwert zugegriffen werden sollte.
Wie du anhand von entsprechend geänderter Ideone-Code siehst, gibt es keinen Zugriff aufc[0]
(sonst käme eine entsprechende Ausgabe).
-
Klar muss der Algorithmus auf s zugreifen. Denk nochmal drüber nach.
-
Auf den ersten Parameter
s
sicherlich, aber nicht aufc[0]
(bei deinem Algo und Aufruf) - und darüber reden wir doch.
-
c[0] ist der erste Parameter entsprechend meiner ersten Betrachtung.
-
@TGGC sagte in 1 bis 100 Centbeträge Möglichkeiten/Kombinationen Algorithmus:
c[0] ist der erste Parameter entsprechend meiner ersten Betrachtung.
Der wird aber nie benutzt! Das ist schon eine reichlich komische Aufrufkonvention. Da könntest du auch 879843754389 reinschreiben und es käme exakt das gleiche Ergebnis raus.
-
Klar wird er benutzt, ohne s hat die Funktion ja gar kein definiertes Ergebnis. Es ist echt nicht so schwer. Es ist einfach eine 3 Zeilen C Funktion, welche die von mit postulierte Funktion berechnet, es muss aussenherum eben nur noch s und Länge des Arrays auf den Stack kopiert werden, da das eine rekursive Funktion in C nicht selbst kann. In C++ könnte man auch einfach nur einen std::vector übergeben.
-
Demnächst schreibe ich auch nur noch Funktionen, wo ich sinnloserweise
PI
(oder jeden beliebig anderen Wert) übergebe...Ich hoffe, die Algorithmen in euren Spielen sind besser durchdacht?
-
Alle 3 Parameter werden benutzt.
So, genug OT.
-
@TGGC sagte in 1 bis 100 Centbeträge Möglichkeiten/Kombinationen Algorithmus:
Alle 3 Parameter werden benutzt.
Es wird aber nicht
c[0]
benutzt! Also wozuc
als{s, m0, m1, ..., mi}
definieren, wenn es auch{m0, m1, ..., mi}
täte?
-
Hab ich doch schon 10mal gesagt: Weil dies die postulierte 3 Zeilenlösung zu der in https://www.c-plusplus.net/forum/topic/350091/1-bis-100-centbeträge-möglichkeiten-kombinationen-algorithmus/7 beschriebenen Funktion ist.
Das ist hier echt Zeitverschwendung...
-
@TGGC sagte in 1 bis 100 Centbeträge Möglichkeiten/Kombinationen Algorithmus:
@Schlangenmensch
int calc(int s, int l, int* c)
{
if (l < 2) return s % c[l] ? 0 : 1;
if (s < c[l] ) return calc(s,l-1, c);
return calc(s,l-1,c) + calc(s-c[l],l,c);
}Da! Darum geht es! Mach daraus
int calc(int s, int l, int* c) { if (l < 1) return s % c[l] ? 0 : 1; if (s < c[l]) return calc(s,l-1, c); return calc(s,l-1,c) + calc(s-c[l],l,c); }
und alles ist viel logischer.