货币兑换问题(贪心法)——Python实现

半腔热情 提交于 2019-12-01 17:39:44
# 贪心算法求解货币兑换问题
# 货币系统有 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]

贪心法保证每步为最优,但不保证全局最优。也就是说,运用贪心法最终可得到非常理想的结果,但还并不是最优的。

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!