Das Problem des Münzwechsels ist sehr gut dokumentiert. In Anbetracht einer unendlichen Vorrat an Münzen von Konfessionen x_1
zu x_m
müssen Sie die Anzahl von Kombinationen zu finden , die summieren sich zu y
. Zum Beispiel gegeben x = {1,2,3}
und y = 4
wir haben vier Kombinationen:
{1,1,1,1}
{1,1,2}
{1,3}
{2,2}
Einführung
Es gibt verschiedene Varianten des Münzwechselproblems. In dieser Variante gibt es zwei zusätzliche Einschränkungen:
- Jede Stückelung muss mindestens einmal verwendet werden.
- Insgesamt muss genau eine feste Anzahl von Münzen verwendet werden.
Zum Beispiel gegeben x = {1,2,3}
, y = 36
und n = 15
wo n
die Gesamtzahl der Münzen ist , die verwendet werden müssen, erhalten wir vier Kombinationen:
{1,2,2,2,2,2,2,2,3,3,3,3,3,3,3}
(1 Einsen, 7 Zweien, 7 Dreien){1,1,2,2,2,2,2,3,3,3,3,3,3,3,3}
(2 Einsen, 5 Zweien, 8 Dreien){1,1,1,2,2,2,3,3,3,3,3,3,3,3,3}
(3 Einsen, 3 Zweien, 9 Dreien){1,1,1,1,2,3,3,3,3,3,3,3,3,3,3}
(4 Einsen, 1 Zweien, 10 Dreien)
Herausforderung
Die Herausforderung besteht darin, eine Funktion enumerate
in der Sprache Ihrer Wahl zu schreiben, die alle oben beschriebenen Kombinationen auflistet:
- Die Liste der Stückelungen. Zum Beispiel
{1,5,10,25}
. Sie können entweder Listen oder Arrays verwenden. - Eine nicht negative Ganzzahl
y
, die die Summe aller Kombinationen angibt. - Eine nicht negative Ganzzahl
n
, die die Gesamtzahl der Münzen angibt.
Die Reihenfolge der Argumente spielt keine Rolle. Punktfreie Funktionen sind erlaubt.
Die Ausgabe der enumerate
Funktion muss eine Liste von Kombinationen sein. Jede Kombination muss eindeutig sein und eine Liste von n
ganzen Zahlen enthalten, die sich addieren y
. Jede Stückelung muss in jeder Kombination mindestens einmal vorkommen und es darf keine Kombination fehlen. Die Reihenfolge der ganzen Zahlen und der Kombinationen spielt keine Rolle. Sie können entweder Listen oder Arrays für die Ausgabe verwenden.
Beachten Sie die folgenden Randfälle:
- Wenn beide
y
undn
Null sind und die Liste der Nennwerte leer ist, ist die Ausgabe eine Liste mit einer Kombination, der leeren Kombination (dh{{}}
). - Wenn andernfalls
y
Nulln
ist, Null ist oder die Liste der Nennwerte leer ist, ist die Ausgabe eine Liste von Nullkombinationen (dh{}
). - Im Allgemeinen
y
istn
die Ausgabe eine Liste von Nullkombinationen , wenn sie kleiner als die Summe der Nennwerte oder kleiner als die Anzahl der Nennwerte ist.
Die Bewertung basiert auf der Größe des gesamten Programms in Byte. Beachten Sie, dass dies die enumerate
Funktion, Hilfsfunktionen, Importanweisungen usw. umfasst. Testfälle sind nicht enthalten.
y
kleiner als die Summe der Nennwerte ist, erreichen Sie irgendwann in Ihrer rekursiven Lösung den Basisfall, in dem die Liste der Nennwerte leer ist. Daher lautet die Antwort {}
(dh es wurde keine Lösung gefunden). Wenn n
weniger als die Anzahl der Nennwerte, dann werden Sie schließlich den Basisfall erreichen, wo n = 0
aber y != 0
. Daher wird die Antwort erneut lauten {}
.