使用Niave方法实现硬币更改问题

时间:2015-11-08 10:48:55

标签: python recursion greedy coin-change

我正在尝试实施硬币改变问题,该问题表明

  如果我们愿意,硬币更改问题被描述为给定值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))

0 个答案:

没有答案