貨幣兌換問題(貪心法)——Python實現


# 貪心算法求解貨幣兌換問題
# 貨幣系統有 n 種硬幣,面值為 v1,v2,v3...vn,其中 v1=1,使用總值money與之兌換,求如何使硬幣的數目最少,即 x1,x2,x3...xn 之和最小
# 輸入:各種貨幣的面值 v1,v2,v3...vn;要兌換的總值 money
# 輸出:兌換得到最少的貨幣數量
 
1 # 修改面額
2 v = [50,10,5,2,1]
3 # 修改要兌換的貨幣量money
4 money = 253
5 # 每種貨幣初始數量為 0
6 x = [0]*len(v)
7 # 總貨幣初始數量為 0
8 count = 0
1 # 從最大面額開始兌換,剩余不足兌換大面額,則接着兌換小面額,直到兌換完成
2 for i in range (0,len(v)):
3     x[i] = money // v[i]         # 取整符號//
4     money = money % v[i]         # 取余符號%
5 for i in range (0,len(v)):
6     count = x[i] + count
1 print('通過貪心算法兌換得到的貨幣數量:',count)
2 print('  其中,面值為 ',v)
3 print('  的貨幣數量分別是 ',x)

運行結果:

1 要兌換的貨幣數量為: 253
2 通過貪心算法兌換得到的貨幣數量: 7
3   其中,面值為  [50, 10, 5, 2, 1]
4   的貨幣數量分別是  [5, 0, 0, 1, 1]

貪心法保證每步為最優,但不保證全局最優。也就是說,運用貪心法最終可得到非常理想的結果,但還並不是最優的。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM