Проблема зміни монети дуже добре зафіксована. З огляду на нескінченний запас монет номіналів x_1в x_mвам потрібно знайти число комбінацій , які додають до y. Наприклад, дано x = {1,2,3}і у y = 4нас є чотири комбінації:
{1,1,1,1}{1,1,2}{1,3}{2,2}
Вступ
Існує кілька варіантів проблеми зміни монети. У цьому варіанті у нас є два додаткові обмеження:
- Кожна конфесія повинна бути використана хоча б один раз.
- Всього потрібно використовувати фіксовану кількість монет.
Наприклад, з урахуванням x = {1,2,3}, y = 36а n = 15де nзагальна кількість монет, які необхідно використовувати, ми отримуємо чотири комбінації:
{1,2,2,2,2,2,2,2,3,3,3,3,3,3,3}(1, 7 двійки, 7 трійки){1,1,2,2,2,2,2,3,3,3,3,3,3,3,3}(2, 5 двійки, 8 трійки){1,1,1,2,2,2,3,3,3,3,3,3,3,3,3}(3, 3 двійки, 9 трійки){1,1,1,1,2,3,3,3,3,3,3,3,3,3,3}(4, 1 двійка, 10 трійки)
Виклик
Завдання полягає в тому, щоб написати функцію enumerateна обраній вами мові, яка перераховує всі комбінації, як описано вище:
- Список конфесій. Наприклад
{1,5,10,25}. Ви можете використовувати або списки, або масиви. - Невід'ємне ціле число,
yяке позначає суму кожної комбінації. - Невід’ємне ціле число,
nяке позначає загальну кількість монет.
Порядок аргументів не має значення. Функції pointfree дозволені.
Виведенням enumerateфункції має бути список комбінацій. Кожна комбінація повинна бути унікальною, і вона має містити список nцілих чисел, до яких додається y. Кожна номінація повинна з’являтися принаймні один раз у кожній комбінації, і жодна комбінація не повинна бути відсутньою. Упорядкування цілих чисел та комбінацій не має значення. Ви можете використовувати або списки, або масиви для виводу.
Майте на увазі наступні крайові випадки:
- Якщо обоє
yіnдорівнюють нулю, а список номіналів порожній, то вихід - це список однієї комбінації, порожня комбінація (тобто{{}}). - В іншому випадку, якщо
yдорівнює нулю,nдорівнює нулю або список номіналів порожній, то вихід - це список нульових комбінацій (тобто{}). - Більш загально, якщо
yменша сума номіналів абоnменша за кількість номіналів, то вихід - це список нульових комбінацій.
Оцінка балів буде залежати від розміру всієї програми в байтах. Зауважте, що це включає в себе enumerateфункцію, допоміжні функції, заяви про імпорт тощо. Це не включає тестові випадки.
yменша сума деномінацій, то в якийсь момент рекурсивного рішення ви досягнете базового випадку, коли список конфесій порожній. Отже, відповідь буде {}(тобто рішення не знайдено). Якщо nменше, ніж кількість конфесій, ви зрештою дістанетесь до базового випадку, де, n = 0але y != 0. Отже, відповідь знову буде {}.