我正在尝试实施硬币改变问题,该问题表明
如果我们愿意,硬币更改问题被描述为给定值N. 为N美分做出改变,我们每个S =都有无限供应 {S1,S2 ,. 。 。 ,Sm}重要的硬币,我们可以做多少种方式 更改?硬币的顺序无关紧要。确定所有可能的方法 通过贪心方法改变N分。例如,对于N = 4和S = {1,2,3},有四种解决方案:{1,1,1,1},{1,1,2},{2,2}, {1,3}。所以输出应该是4.对于N = 10和S = {2,5,3,6},那里 是五个解决方案:{2,2,2,2,2},{2,2,3,3},{2,2,6},{2,3, 5}和{5,5}。所以输出应该是5。
注意:这不是我们必须找到最佳解决方案的原始硬币变化问题(即最小硬币数量)
在我的下面的python实现中,我使用名为$ check $的列表名称。问题是程序在整个运行时间使用相同的$ check $列表,因此我得到了错误的结果。它应该使用$ check $列表,该列表是其函数调用的本地。任何人都可以找到解决方法..
# N
N = 10
# Set of Changes
s = [2, 3, 5, 6]
lst = []
check = [0, 0, 0, 0]
def Coin_Change_Count(C, check):
for k in range(len(s)):
i = len(s) - k - 1
t = C - s[i]
if (t >= 0):
if (s[i] == 2):
check[0] += 1
elif (s[i] == 3):
check[1] += 1
elif (s[i] == 5):
check[2] += 1
elif (s[i] == 6):
check[3] += 1
if (t >= s[0]):
Coin_Change_Count(t, check)
if (t == 0):
if (not (check in lst)):
lst.append(check)
Coin_Change_Count(N, check)
print(len(lst))