Masalah perubahan koin didokumentasikan dengan sangat baik. Diberikan pasokan koin denominasi tanpa batas x_1
kepada x_m
Anda, Anda perlu menemukan jumlah kombinasi yang berjumlah hingga y
. Misalnya, diberikan x = {1,2,3}
dan y = 4
kami memiliki empat kombinasi:
{1,1,1,1}
{1,1,2}
{1,3}
{2,2}
pengantar
Ada beberapa variasi masalah perubahan koin. Dalam variasi ini kami memiliki dua batasan tambahan:
- Setiap denominasi harus digunakan setidaknya satu kali.
- Jumlah koin yang pasti harus digunakan secara total.
Misalnya, diberikan x = {1,2,3}
, y = 36
dan di n = 15
mana n
jumlah total koin yang harus digunakan, kami mendapatkan empat kombinasi:
{1,2,2,2,2,2,2,2,3,3,3,3,3,3,3}
(1 yang, 7 dua, 7 bertiga){1,1,2,2,2,2,2,3,3,3,3,3,3,3,3}
(2 orang, 5 pasangan, 8 bertiga){1,1,1,2,2,2,3,3,3,3,3,3,3,3,3}
(3 yang, 3 dua, 9 bertiga){1,1,1,1,2,3,3,3,3,3,3,3,3,3,3}
(4 orang, 1 dua, 10 bertiga)
Tantangan
Tantangannya adalah untuk menulis fungsi enumerate
dalam bahasa pilihan Anda yang menyebutkan semua kombinasi seperti dijelaskan di atas:
- Daftar denominasi. Sebagai contoh
{1,5,10,25}
. Anda dapat menggunakan daftar atau array. - Integer non-negatif
y
yang menunjukkan jumlah setiap kombinasi. - Bilangan bulat non-negatif
n
yang menunjukkan jumlah total koin.
Urutan argumen tidak masalah. Fungsi pointfree diizinkan.
Output dari enumerate
fungsi harus berupa daftar kombinasi. Setiap kombinasi harus unik dan harus berupa daftar n
bilangan bulat yang ditambahkan y
. Setiap denominasi harus muncul setidaknya sekali dalam setiap kombinasi dan tidak ada kombinasi yang harus hilang. Urutan bilangan bulat dan kombinasinya tidak masalah. Anda dapat menggunakan daftar atau array untuk output.
Ingatlah kasus tepi berikut:
- Jika keduanya
y
dann
nol dan daftar denominasi kosong maka output adalah daftar satu kombinasi, kombinasi kosong (yaitu{{}}
). - Kalau tidak, jika
y
nol,n
adalah nol atau daftar denominasi kosong maka outputnya adalah daftar kombinasi nol (yaitu{}
). - Lebih umum, jika
y
lebih kecil dari jumlah denominasi ataun
kurang dari jumlah denominasi maka hasilnya adalah daftar kombinasi nol.
Penilaian akan didasarkan pada ukuran seluruh program dalam byte. Perhatikan bahwa ini termasuk enumerate
fungsi, fungsi pembantu, pernyataan impor, dll. Ini tidak termasuk kasus uji.
y
kurang dari jumlah denominasi maka pada beberapa titik dalam solusi rekursif Anda, Anda akan mencapai kasus dasar di mana daftar denominasi kosong. Oleh karena itu, jawabannya adalah {}
(yaitu tidak ada solusi yang ditemukan). Jika n
kurang dari jumlah denominasi maka pada akhirnya Anda akan mencapai kasus dasar di mana n = 0
tetapi y != 0
. Karenanya, jawabannya akan kembali {}
.