1

私はそれを述べているコイン変更問題を実装しようとしています

硬貨両替問題は、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))
4

0 に答える 0