Проблема смены монет очень хорошо задокументирована. Учитывая бесконечный запас монет номиналов 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которое обозначает общее количество монет.
Порядок аргументов не имеет значения. Точечные функции разрешены.
Выходные данные enumerateфункции должны быть списком комбинаций. Каждая комбинация должна быть уникальной, и это должен быть список nцелых чисел, которые складываются в y. Каждое наименование должно появляться хотя бы один раз в каждой комбинации, и ни одна комбинация не должна отсутствовать. Порядок целых чисел и комбинаций не имеет значения. Вы можете использовать списки или массивы для вывода.
Имейте в виду следующие крайние случаи:
- Если оба
yиnравны нулю и список наименований пуст, то на выходе получается список из одной комбинации, пустой комбинации (то есть{{}}). - В противном случае, если
yноль,nноль или список наименований пуст, то на выходе получается список нулевых комбинаций (т.е.{}). - В более общем смысле, если
yменьше, чем сумма достоинств илиnменьше, чем число достоинств, то результатом является список нулевых комбинаций.
Оценка будет зависеть от размера всей программы в байтах. Обратите внимание, что это включает в себя enumerateфункцию, вспомогательные функции, операторы импорта и т. Д. Оно не включает тестовые случаи.
yменьше суммы деноминаций, то в какой-то момент вашего рекурсивного решения вы достигнете базового случая, когда список конфессий пуст. Следовательно, ответ будет {}(т.е. решение не найдено). Если nчисло конфессий меньше, то в конечном итоге вы достигнете базового варианта, где, n = 0но y != 0. Следовательно, ответ снова будет {}.