Python 用Niave方法实现硬币兑换问题
我试图实现硬币兑换问题,它表明 换币问题被描述为给定一个值N,如果我们想的话 只要换N美分的零钱,我们就有无限量的零钱= {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,3,3},{2,2,6},{2,3, 5} 和{5,5}。所以输出应该是5 注:这不是最初的换币问题,我们必须找到最佳解决方案(即最小硬币数量) 在我下面的python实现中,我使用了一个名为$check$的列表名。问题是程序在整个运行时都使用相同的$check$列表,所以我得到了错误的结果。它应该使用$check$列表,该列表是其函数调用的本地列表。有人能找到一条出路吗Python 用Niave方法实现硬币兑换问题,python,recursion,greedy,coin-change,Python,Recursion,Greedy,Coin Change,我试图实现硬币兑换问题,它表明 换币问题被描述为给定一个值N,如果我们想的话 只要换N美分的零钱,我们就有无限量的零钱= {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,3,3},{2,2,6},{2
# 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))
您有一个全局变量
check
和一个函数参数check
。为清晰起见,请重命名其中一个。还要阅读Python文档以了解如何使用globals,查找规则可能有点令人惊讶。顺便说一句:由于您只将全局检查传递给函数,因此全局变量和局部变量总是相同的。您可能需要复制列表。也就是说,你能给我一个你正在尝试实现的Niave方法的参考吗?@UlrichEckhardt实际上它是在我的算法实验室中给出的一个赋值,我使用的过程只是我的。你有一个全局变量check
和一个函数参数check
。为清晰起见,请重命名其中一个。还要阅读Python文档以了解如何使用globals,查找规则可能有点令人惊讶。顺便说一句:由于您只将全局检查传递给函数,因此全局变量和局部变量总是相同的。您可能需要复制列表。也就是说,你能给我一个你正在尝试实现的Niave方法的参考吗?@UlrichEckhardt实际上它是在我的算法实验室中给出的一个任务,我正在使用的过程只是我的。