【贪心算法】找零钱

文章介绍了如何运用贪心算法来解决在只有特定面值硬币的情况下,找零最小硬币数的问题。通过编写Python代码,实现按面值从大到小选择硬币,确保找零数量最少。用户输入需找零的金额,程序会计算并输出最少的硬币组合。
摘要由CSDN通过智能技术生成

问题描述:

假设只有 1 分、 2 分、五分、 1 角、二角、 五角、 1元的硬币。在超市结账 时,如果 需要找零钱, 收银员希望将最少的硬币数找给顾客。那么给定 需要找的零钱数目,如何求得最少的硬币数呢?


贪心算法:
贪心算法(Greedy Alogorithm)又叫登山算法,它的根本思想是逐步到达山顶,即逐步获得最优解,是解决最优化问题时的一种简单但是适用范围有限的策略。

贪心算法没有固定的框架,算法设计的关键是贪婪策略的选择。贪心策略要无后向性,也就是说某状态以后的过程不会影响以前的状态,至于当前状态有关。


做题思路

用贪心算法的思想,很显然,每一步尽可能用面值大的纸币即可。在日常生活中我们自然而然也是这么做的。在程序中已经事先将Value按照从小到大的顺序排好

# coding=utf-8
d=[1,0.02,0.1,0.05,0.2,0.01,0.5]
def change():
    d.sort()     #d=[0.01,0.02,0.05,0.1,0.2,0.5,1]
    while True:
        try:
            sum=float(input('请输入一个数'))
            if sum<=0:
                print('不能低于0')
            else:
                break
        except:
            print('输入有误')
    i=len(d)-1
    while i >= 0:
        if sum>=d[i]:
            n=int(sum/d[i])
            sum=float("{:.2f}".format(sum-n*d[i]))
            print("找了{}个{}元硬币".format(n,d[i]))
        i-=1
change()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值