python贪心算法,顾客给钱(售货员找零)问题,超详细

贪心算法就是一种先要达到利益最大化的算法,付出最少的东西,得到相同的利润。

首先,让我们看一下顾客给钱(售货员找零)这道题:

实现结果如下:

让我们一起来看看怎么实现它:

最开始,我们输入一个K作为顾客需要付的钱(售货员需要找的钱)。

K=int(input(f"请输入要付金额:"))        #输入要付款的钱数

然后,我们设立两个列表,一个列表c将我们拥有的各面额数额输进去。

另一个列表number记录每个数额的钱币有多少张。

再定义一个数sum记顾客手中钱币的总金额(售货员手中的钱币的总额)。

c=[1,2,5,10,20,50,100]     #定义一个数组代表已有的铅笔数额值
number=[]         #
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法贪心算法并不保证会得到最优解,但是在某些问题中,它能够得到最优解。为了更好地理解贪心算法并掌握其应用,推荐参考《算法导论:英文第三版高清PDF》。 参考资源链接:[算法导论:英文第三版高清PDF](https://wenku.youkuaiyun.com/doc/60688937om) 在《算法导论》中,贪心算法被详细讲解,并通过实际例子阐述其原理。例如,可以利用贪心算法来解决找零问题。假设你是一个售货员,需要给顾客找零n美分,而你的钱箱中有面值为c1, c2, ..., cm的硬币,硬币数量无限,如何用最少的硬币数找零? 为了找到最少硬币数的解,我们可以按照硬币面值从大到小的顺序,依次取当前面值最大的硬币,直到找零完成。这是一个典型的贪心算法应用。 具体实现时,可以编写一个函数,输入总金额和硬币面值列表,输出最少的硬币数量。例如,在Python中,可以这样实现: ```python def greedy_coin_change(coins, amount): coins.sort(reverse=True) # 从大到小排序硬币面值 coin_count = 0 # 硬币数量初始化 for coin in coins: while amount >= coin: amount -= coin coin_count += 1 if amount == 0: break return coin_count coins = [25, 10, 5, 1] amount = 63 print(greedy_coin_change(coins, amount)) # 输出最少硬币数 ``` 通过上述代码,我们可以得到找零63美分所需的最少硬币数。当然,贪心算法并不总是能得到最优解,有些问题需要使用动态规划或其他算法来得到正确的答案。在深入学习贪心算法的基础上,还可以通过《算法导论》中提供的其他章节内容,比如动态规划、回溯法等,来提高解决问题的广度和深度。 参考资源链接:[算法导论:英文第三版高清PDF](https://wenku.youkuaiyun.com/doc/60688937om)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值