--- title: 24-5:貪心法-最少紙幣兌換 lang: zh-tw tags: DICE Python --- 24-5:貪心法-最少紙幣兌換 === > [name=Chinglin-K] --- 目錄:[Dice 程式教學-Python完整版](https://hackmd.io/@Chinglin-K/Dice-menu) 上一篇:[24-4:窮舉法-百錢百雞問題](https://hackmd.io/@Chinglin-K/Dice-24-4) 下一篇:[24-6:分治法-階乘](https://hackmd.io/@Chinglin-K/Dice-24-6) --- ## 題目 貪婪演算法: 在進行解決問題的過程中,把問題分成數個子問題,每個子問題都選擇當前最佳最有利的選擇/解答, 直到解決問題為止。 Step1:定義貪婪準則 根據此貪婪準則,不斷找出目前小問題的最佳解。 Step2:不斷重複貪婪準則,直到解決問題為止 不斷的使用貪婪準則,,找出每個小問題的最佳解,直到解決問題為止。 以最少紙幣兌換為例: 問題: 要把 n 元(n<=1000),兌換成1000元、 500 元, 100 元, 5 元, 1 元紙幣, 如何兌換可以讓最終的紙幣數最少? 程式可以重複輸入,直到輸入的金額為0。 輸入範例: 967 73 39 525 0 輸出範例: 1張500元 4張100元 1張50元 1張10元 1張5元 2張1元 0張500元 0張100元 1張50元 2張10元 0張5元 3張1元 0張500元 0張100元 0張50元 3張10元 1張5元 4張1元 1張500元 0張100元 0張50元 2張10元 1張5元 0張1元 --- ## 程式碼 ```Python= money=[500,100,50,10,5,1] def count(n,m): if(m<6 or n>0): x=n//money[m] print(f'{x}張{money[m]}元',end=" ") return count(n%money[m],m+1) else: print() return 1 while True: a=int(input()) if(a==0): break count(a,0) ``` --- ## 輸出 ```Python= ``` --- 目錄:[Dice 程式教學-Python完整版](https://hackmd.io/@Chinglin-K/Dice-menu) 上一篇:[24-4:窮舉法-百錢百雞問題](https://hackmd.io/@Chinglin-K/Dice-24-4) 下一篇:[24-6:分治法-階乘](https://hackmd.io/@Chinglin-K/Dice-24-6) --- :::info 「盡多少本分,得多少本事」😊 ::: --- {%hackmd i1nMRrZcTFmTvoF897K9zg %}