【python算法书】硬币找零问题?

题目:窝窝要去商店买棒棒糖,她怎么样才能用最少个数的硬币买到心仪的糖果呢?

分析:找零问题的贪心算法求解。为了满足我们要用最少的硬币数量支付指定额度的金额这一要求,每次使用可选的最大金额付款符合一贯“贪心”的习惯。根据常识,在当前阶段,使用可用的最大面值金额支付剩余待找零额度,可以使后面的待找零额度尽量小,从而更有可能促使之后支付需要的硬币数量尽量少。

code:

def findO(par, sum):

    # 从面值最大的元素开始遍历

    i = len(par) - 1

    while i >= 0:

        if sum >= par[i]:

            n = int(sum // par[i])  # 用该币值的个数

            change = n * par[i]  # 扣掉该币值使用的总数

            sum = float("%.6f" % (sum - change))  # 剩余的钱

            print("用了%d个%1.2f元硬币"%(n, par[i]))

        i -= 1

if __name__ == "__main__":

    par = [0.05, 0.1, 0.2, 0.5, 1.0, 2.0]  # 存储每种硬币面值,从小到大

    sum = 5.65

    findO(par, sum)


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,074评论 0 2
  • 前言 我曾经要帮一个朋友理解dynamic programming(动态规划,简称DP),所以会留心一些好的资源。...
    何旭东_07ac阅读 6,861评论 0 1
  • 以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译:巨蟹 、少平 译者注:中文读者可以到以太坊爱...
    车圣阅读 9,221评论 1 7
  • 发了一下午的维护信息,还没发完,哈哈哈……任重道远!
    中印瑜伽娟子老师阅读 1,198评论 0 0
  • 题目描述 对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。 给定图中的两个结点的指针Undirect...
    难以置信的优雅阅读 1,274评论 0 0

友情链接更多精彩内容