Il problema del cambio delle monete è ben documentato. Dato un rifornimento infinito di monete di denominazioni x_1
a x_m
Hai bisogno di trovare il numero di combinazioni che si sommano a y
. Ad esempio, dato x = {1,2,3}
e y = 4
abbiamo quattro combinazioni:
{1,1,1,1}
{1,1,2}
{1,3}
{2,2}
introduzione
Esistono diverse varianti del problema di cambio moneta. In questa variante abbiamo due ulteriori restrizioni:
- Ogni denominazione deve essere utilizzata almeno una volta.
- Esattamente un numero fisso di monete deve essere utilizzato in totale.
Ad esempio, dato x = {1,2,3}
, y = 36
e n = 15
dove n
è il numero totale di monete che devono essere utilizzati, otteniamo quattro combinazioni:
{1,2,2,2,2,2,2,2,3,3,3,3,3,3,3}
(1 uno, 7 due, 7 tre){1,1,2,2,2,2,2,3,3,3,3,3,3,3,3}
(2, 5 o 8){1,1,1,2,2,2,3,3,3,3,3,3,3,3,3}
(3 uno, 3 due, 9 tre){1,1,1,1,2,3,3,3,3,3,3,3,3,3,3}
(4 unità, 1 coppia, 10 tre)
Sfida
La sfida è scrivere una funzione enumerate
nella lingua di tua scelta che enumera tutte le combinazioni come descritto sopra dato:
- L'elenco delle denominazioni. Per esempio
{1,5,10,25}
. È possibile utilizzare elenchi o matrici. - Un numero intero non negativo
y
che indica la somma di ogni combinazione. - Un numero intero non negativo
n
che indica il numero totale di monete.
L'ordine degli argomenti non ha importanza. Sono ammesse funzioni senza punti.
L'output della enumerate
funzione deve essere un elenco di combinazioni. Ogni combinazione deve essere unica e deve essere un elenco di n
numeri interi che si sommano y
. Ogni denominazione deve apparire almeno una volta in ogni combinazione e non deve mancare alcuna combinazione. L'ordinamento degli interi e delle combinazioni non ha importanza. È possibile utilizzare elenchi o matrici per l'output.
Tenere presente i seguenti casi limite:
- Se entrambi
y
en
sono zero e l'elenco delle denominazioni è vuoto, l'output è un elenco di una combinazione, la combinazione vuota (cioè{{}}
). - Altrimenti, se
y
è zero,n
è zero o l'elenco delle denominazioni è vuoto, l'output è un elenco di zero combinazioni (cioè{}
). - Più in generale, se
y
è inferiore alla somma delle denominazioni on
è inferiore al numero di denominazioni, l'output è un elenco di zero combinazioni.
Il punteggio si baserà sulla dimensione dell'intero programma in byte. Si noti che ciò include la enumerate
funzione, le funzioni di supporto, le dichiarazioni di importazione, ecc. Non include i casi di test.
y
è inferiore alla somma delle denominazioni, ad un certo punto della soluzione ricorsiva raggiungerai il caso base in cui l'elenco delle denominazioni è vuoto. Quindi, la risposta sarà {}
(cioè nessuna soluzione trovata). Se n
è inferiore al numero di denominazioni, alla fine raggiungerai il caso base dove n = 0
ma y != 0
. Quindi, la risposta sarà di nuovo {}
.