场景描述

在超市结账时,假设只有1分、5分、1角、3角、5角、1元的硬币,如果需要找零钱,给定需要找的零钱数目,使收银员找给顾客的硬币数量最少,运行程序如图:

知识补充

 贪心算法是指在当前问题求解中,总是做出当前的最好选择,也就是局部最优解!使用贪心策略必须保证无后效性,也就是某个状态以后的过程不会影响到状态之前,同时局部最优策略可以产生全局最优解。

贪心算法一般的解决步骤是:

1.建立数学模型来描述问题;
        2.把求解的问题分成若干个子问题;
        3.对每一子问题求解,得到子问题的局部最优解;
        4.把子问题的局部最优解合成原来问题的一个解。

定义函数功能

初始化收银员拥有零钱数

通过input得到每种零钱数量,定义收银员拥有的总零钱数,防止无法进行找零,同时确定各面值硬币的数量。

"""通过输入获取总零钱
"""
def new_coin():print("=====收银员总零钱统计=====")coin = [0.01, 0.05, 0.1, 0.5, 1.0]coin_num = []sum = 0for index, i in enumerate(coin):num = int(input('收银员{}面值硬币有几个?'.format(i)))coin_num.append(num)sum += i * numprint("收银员总零钱数:{0}".format(sum))return sum, coin, coin_num

编写找零

从最大硬币面值开始,计算这一类面值可以找多少金额,每一类面值硬币的找零数量就是一个子问题,同时汇总以达到总硬币数最小的目标。

""" 计算找零
"""
def change(sum, coin, coin_num):print('==========找零==========')s = float(input("请输入要找零金额:"))# 找零比收银员总零钱数大if s > sum:print("收银员零钱不够!")else:# 贪心算法要总硬币数最少,从最大面值开始找零i = len(coin) - 1while i >= 0:if s >= coin[i]:n = int(s / coin[i])if n > coin_num[i]:n = coin_num[i]#贪心算法 动态改变找零总值s -= n * coin[i]print("用了{0}面值的硬币{1}个".format(coin[i], n))i -= 1print("找零结束!")

完整代码实现


"""通过输入获取总零钱
"""
def new_coin():print("=====收银员总零钱统计=====")coin = [0.01, 0.05, 0.1, 0.5, 1.0]coin_num = []sum = 0for index, i in enumerate(coin):num = int(input('收银员{}面值硬币有几个?'.format(i)))coin_num.append(num)sum += i * numprint("收银员总零钱数:{0}".format(sum))return sum, coin, coin_num""" 计算找零 """
def change(sum, coin, coin_num):print('==========找零==========')s = float(input("请输入要找零金额:"))# 找零比收银员总零钱数大if s > sum:print("收银员零钱不够!")else:# 贪心算法要总硬币数最少,从最大面值开始找零i = len(coin) - 1while i >= 0:if s >= coin[i]:n = int(s / coin[i])if n > coin_num[i]:n = coin_num[i]#贪心算法 动态改变找零总值s -= n * coin[i]print("用了{0}面值的硬币{1}个".format(coin[i], n))i -= 1print("找零结束!")if __name__ == '__main__':print("============收银员找零================")sum, coin, coin_num = new_coin()change(sum, coin, coin_num)

PS: 个人原因,断更许久,今天开始慢慢接上之前的更新。

欢迎点赞、收藏、评论区交流,转载标明出处。

Python贪心算法解决收银员找零问题相关推荐

  1. python换零钱_黄哥Python, 贪心算法解决换零钱问题

    下面的文字来源于维基百科 贪心算法(英语:greedy algorithm) 又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法.比如 ...

  2. 贪心算法经典问题:硬币找零

    这是一个用最少硬币支付指定额度的问题. 一.问题描述:如下图图一,设有6种不同面值的硬币,各硬币的面值分别为5分.1角.2角.5角.1元.2元.现要用这些面值的硬币来购物和找钱.购物时规定了可以使用的 ...

  3. 贪心算法:860.柠檬水找零

    题目描述: 在柠檬水摊上,每一杯柠檬水的售价为 5 美元.顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美元 ...

  4. 贪心算法解决找零钱问题

    4.1 找零问题 问题描述: 设有50.20.10.5.1.0.5.0.1等面额的零钱,顾 客购物花了n元,在支付(n / 100 + 1) * 100元后,收银员应如何找 零,才能使找回的钱数最少. ...

  5. python贪心算法最短路径_dijkstra算法(贪心算法)——解决最短路径问题

    最短路径 给定一张带权图和其中的一个点(作为源点),求源点到其余顶点的最短路径 基本思想 1)源点u,所有顶点的集合V,集合S(S中存有的顶点,他们到源点的最短路径已经确定,源点u默认在S中),集合V ...

  6. Python项目:The Ship Rendezvous Problem,利用贪心算法解决船舶交会问题

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Python利用贪心算法解决船舶交会问题 1 Introduction 2 Python Task Greedy Heuristic ...

  7. 贪心算法解决活动安排-Python实现(排序+贪心选择)

    贪心算法解决活动安排 问题 问题概述 分析问题 解决问题 编程 编程流程以及数据类型选择 发现问题以及解决 最终实现 总结 程序缺陷以及完善 解题心路历程 问题 问题概述 设有n个活动的集合E={1, ...

  8. 『设计模式』就因为多收了我2块5,我追着收银员问是不是不懂设计模式--策略模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 今天去超市买东西,买了50多块钱的东西,然后收钱的时候他多收了,明明会员要打白金会员打9折,黄金会员95折,我是白金会员因该是9折. 我问她:&qu ...

  9. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题

    前面我们分享了关于js使用贪心算法解决找零问题,本文我们接着为大家介绍JS基于贪心算法解决背包问题. 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做 ...

最新文章

  1. Nginx HTTPS功能部署实践
  2. 秋天六食物吃出好皮肤
  3. insightface face_preprocess
  4. python写小程序-你用python写过那些好玩的微信小程序?
  5. golang设置默认地区
  6. 如果用神经网络分类处于纠缠态的一对粒子?
  7. Google工程师:如何看待程序员普遍缺乏数据结构和算法知识?
  8. 关于成本中心计划与过账
  9. IOS-网络(GCD)
  10. 国外问答网站Quora数据的爬虫 Java
  11. socket.io 中文手册 socket.io 中文文档
  12. 王道考研-计算机网络
  13. Win7安装英文语言包(图文)
  14. FFmpeg获取视频正确的宽高比
  15. Correlation Congruence for Knowledge Distillation
  16. 《玩转股票量化交易》知识星球2021年度回顾
  17. 中国十大芯片企业排名
  18. Xilinx FPGA的DNA是什么?
  19. js数组对象重复的数据添加标识
  20. matlab的ezplot绘图函数

热门文章

  1. 超外差接收机原理图讲解(一)--射频部分
  2. 零基础学python实战答案-Python编程从零基础到项目实战 完整PPT+习题答案
  3. android 自定义超链接,Android -- 文字设置超链接
  4. 中基鸿业市场上投资理财的渠道
  5. Excel如何快速从邮箱中提取QQ号码
  6. 计算机集成电板 ppt,史上最全,PCB板和集成电路解析(干货分享)
  7. vue-pdf(v4.3.0)
  8. 开箱啦~带你玩转飞凌高算力“魔盒”——AI边缘计算终端FCU3001
  9. 如何打造ip,打造属于自己的护城河?
  10. 今天用JAVA写一个坦克大战游戏tankwar