2012-04-11 6 views
-5
def changeMaking(changeList, target): 
     changeLength = len(changeList) 
     F = [0]*changeLength 


     for i in range(1,target): 
     minimum = 99999 
     j = 1 
     for j in range(1, changeLength): 
      if changeList[j] <= i: 
       if 1+F[i-changeList[j] < minimum: 
         minimum = 1 + F[i-changeList[j]] 
         coin = j 
     return F[i] = minimum 


def main(): 

    changeList = [1, 5, 10, 15, 25] #coin denominations 
    target = 150 

    result = changeMaking(changeList, target) 

    print(result) 
main() 

変更プログラムを作成しようとしていますが、このアルゴリズムを動作させる方法を理解できません。問題は明らかでなければならない...それはうまくいかない。アルゴリズムが実行しようとしているのは、目標額を見つけるために必要なコインの最低額を見つけることです。指定金額リストと目標値からの変更

+3

あなたはあなたに問題を教えたり、質問をしたりしておらず、「このコードをデバッグしてください」は今後誰にも役立たない。 – agf

+0

問題が何だったのか分かっていれば、ここに投稿する必要はありません。 –

+3

はい、「動作しません」は、特定の問題を特定する際に何の努力もしていません。 _How_それは動作しませんか?エラーを定量化してみてください。 – agf

答えて

1

どのようにこれはあなたですか?

def changeMaking(list, amount, check=False): 
    list = reversed(sorted(list)) 
    result = [] 
    changeCount = 0 
    for coin in list: 
     count = 0 
     while changeCount + coin <= amount: 
      changeCount = changeCount + coin 
      count = count + 1 

     if count > 0: 
      result.append([coin, count]) 
    if not check or changeCount == amount: 
     return result 
    else: 
     return False 

あなたは私たちに多くの情報を与えていないので、私はあなたがそれを可能な限り最小の変更でそれを返すようにしたいと思うと仮定しました。

は、それはまた、第三のパラメータ、真、機能チェック変更した場合を受け付ける

[[50, 1], [5, 1], [1, 1]] 

を返す例

change = changeMaking([1, 2, 5, 10, 20, 50, 100], 56) 

についてそう

change = changeMaking(coins, amount) 

ように動作します可能でした(あなたのコインリストに1があれば常に真実になるはずです...)

+0

'changeMaking([1、10、25、50、100]、30)'は、最適でない結果を返します。 http://oucsace.cs.ohiou.edu/~razvan/courses/cs404/lecture19.pdfの3ページを参照してください。 –

+0

@StevenRumbalski classic programming year 1 hw problem :( – George

+0

ありがとう、私の機能に即座にパッチを当てることはできません。 – Nathaniel

関連する問題