# 貪心算法求解貨幣兌換問題
# 貨幣系統有 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]
貪心法保證每步為最優,但不保證全局最優。也就是說,運用貪心法最終可得到非常理想的結果,但還並不是最優的。