Masalah perubahan koin didokumentasikan dengan sangat baik. Diberikan pasokan koin denominasi tanpa batas x_1kepada x_mAnda, Anda perlu menemukan jumlah kombinasi yang berjumlah hingga y. Misalnya, diberikan x = {1,2,3}dan y = 4kami 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 = 36dan di n = 15mana njumlah 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 enumeratedalam 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
yyang menunjukkan jumlah setiap kombinasi. - Bilangan bulat non-negatif
nyang menunjukkan jumlah total koin.
Urutan argumen tidak masalah. Fungsi pointfree diizinkan.
Output dari enumeratefungsi harus berupa daftar kombinasi. Setiap kombinasi harus unik dan harus berupa daftar nbilangan 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
ydannnol dan daftar denominasi kosong maka output adalah daftar satu kombinasi, kombinasi kosong (yaitu{{}}). - Kalau tidak, jika
ynol,nadalah nol atau daftar denominasi kosong maka outputnya adalah daftar kombinasi nol (yaitu{}). - Lebih umum, jika
ylebih kecil dari jumlah denominasi ataunkurang dari jumlah denominasi maka hasilnya adalah daftar kombinasi nol.
Penilaian akan didasarkan pada ukuran seluruh program dalam byte. Perhatikan bahwa ini termasuk enumeratefungsi, fungsi pembantu, pernyataan impor, dll. Ini tidak termasuk kasus uji.
ykurang 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 nkurang dari jumlah denominasi maka pada akhirnya Anda akan mencapai kasus dasar di mana n = 0tetapi y != 0. Karenanya, jawabannya akan kembali {}.