该硬币找零问题是非常有据可查。由于币值的硬币的无限供给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个2、7个3){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
。因此,答案将再次是{}
。