场景描述

在超市结账时,假设只有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. 与AMD合并后,赛灵思与英特尔、英伟达在数据中心市场呈“三足鼎立”之势
  2. Spring Cloud Alibaba迁移指南(二):零代码替换 Eureka
  3. 【Linux】 -bash-4.2#问题和Cannot allocate memory
  4. 管线命令 cut grep
  5. 前后端分离之Vue(三)爬过得那些坑
  6. 柱状图python_python柱状图一行
  7. 百度2015校园招聘软件开发笔试题及答案
  8. javascript Date类型 学习笔记
  9. 矩阵的四个基本子空间
  10. Sharding-Proxy简介_原理_安装_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记018
  11. Python PEP8 编码规范 代码布局
  12. 铁路售票系统_自助售票机功能升级了!快来掌握新技能!
  13. struct 结构体 所占字节数的计算
  14. 计算机网络:网络常用命令的使用及DNS层次查询、SMTP协议分析
  15. vue element 项目 表单校验 保姆级教程 纳税人识别号 公司电话传真 银行卡校验(包含注意点)
  16. python实训案例-用户账户管理
  17. vb中怎么使图片适应框的大小_如何让放进框内的图片随框大小而变
  18. 编码过程中单词常用的缩写方式(转载)
  19. 荣耀猎人是鸿蒙,荣耀猎人游戏本发布 | 荣耀推出全场景游戏品牌 “Hunter”
  20. 中科院 2014年工程硕士入学专业课笔试考场安排

热门文章

  1. allegro怎么设置孔的属性_ALLEGRO怎么改孔
  2. 蓝桥杯嵌入式学习STM32之外部中断EXTI详解
  3. 生活随记 - 不走寻常路的师傅
  4. 【Vue3】滑动验证组件 | 滑动验证
  5. CentOS6.8安装教程
  6. Vue 跨域请求报错No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
  7. VScode 插件 bookmarks
  8. BIOS实战之VBIOS配置
  9. php调用nfc,小米手机怎么将NFC功能当做门禁卡来使用?
  10. HelloWorld! 程序猿同志,茴香豆的茴字有几种字法?