设有6种不同面值的硬币,各硬币的面值分别为5分、1角、2角、5角、1元和2元。现在要用这些面值的硬币来购物和找钱。购物时可以使用的各种面值的硬币个数存于数组Coins[1:6]中,假设商店里各面值的硬币有足够多。对于给定的付款金额,计算使用硬币个数最少的交易方案。
输入数据的每一行有6个整数和一个有2位小数的实数,
       分别表示可以使用的各种面值的硬币个数和付款金额。
输出为交易所需要的最少硬币个数,如果不可能完成交易,则输出“impossible”。

问题解释:

这里要注意一个点:
此处交易所需的最少硬币个数为 你支付的硬币个数 + 商店找给你的硬币个数。

例如:
一次购物需要支付0.95元,你可以给他的硬币组合为: 0.5 一个 + 0.2 两个 + 0.05 一个
                                             0.5+0.2+.0.2+0.05=0.95
即 此处使用了四个硬币完成了交易。但我们发现,如果我们支付 一个 1 元的硬币,商店找回给我们一个0.05的硬币,仅需要两个硬币便完成的交易。
                                                          1-0.05=0.95

贪心算法:

所谓贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。

贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性。

贪心算法的基本思想:

解决本问题的关键在于找到贪心变量,本问题的贪心变量为实际支付金额。由于改变了支付面额的大小,以及商店会找零,就是对于这些硬币的排列组合。

步骤:

遍历备选的元素
选择贪心策略

I中剩余元素不发生变化,
I剩余元素不会变化。

接下来就是代码了,请自行观看:


def contains(a):for i in range(0,6):if (coinvalue[i] == a and coins[i] > 0):return ireturn -1def greed(coinvalue,changvalue,coins,Pay):global  coinnumfor i in range(5, -1, -1):#从大到小遍历if coins[i] > 0:#如果顾客手里有剩余硬币for j in range(i):#商店的硬币从小到大遍历,进行找零realmoney = coinvalue[i] - changvalue[j]#实际上的支付金额=支付硬币的价值-商店找零的价值if Pay >= realmoney:#只有当实际支付金额效玉目标金额时才进行选取,否则需要增加找零硬币的金额(即,继续本层循环 j)if coins[i] >= Pay // realmoney:#如果当前面值硬币找零后足够支付余额tempcoinnum = Pay // realmoneycoinnum += tempcoinnum * 2#如果顾客有该硬币,则无需找零,因为找零会消耗两个硬币。if(contains(realmoney) != -1):tempcoinnum = min(tempcoinnum, coins[contains(realmoney)])coinnum -= tempcoinnumcoins[contains(realmoney)] -= tempcoinnumelse:coins[i] -= Pay // realmoneyPay = Pay % realmoneyif (contains(coinvalue[i]) == -1):breakelse:coinnum += coins[i]Pay = Pay - coinvalue[i] * coins[i]coins[i] = 0def outoutresult():if coinnum == 0 or Pay == 0:print("imossible !")else:print("支付和找零需要的最少总硬币数量:",coinnum)coinnum = 0
coinvalue = [5, 10, 20, 50, 100, 200]
changvalue = [0, 5, 10, 20, 50, 100, 200]
realmoney = 0
print("请输入需要支付的金额:")
costt = float(input())
Pay = int(costt * 100)
coins = []
print("请输入硬币个数:")
for i in range(0,6):coins.append(int(input()))
greed(coinvalue,changvalue,coins ,Pay)outoutresult()

硬币找钱问题(最小硬币和问题)详解与代码实现相关推荐

  1. 7-7 硬币找钱问题 (10 分)(思路+详解+double类型数据的处理)Come baby!!!!!!!!!!!!!!!!!!!!

    一:题目 设有6 种不同面值的硬币,各硬币的面值分别为5 分,1 角,2 角,5 角,1 元,2元.现要用这些面值的硬币来购物.在购物中希望使用最少个数硬币.例如,1 次购物需要付款0.55 元,如果 ...

  2. STM32最小系统硬件组成详解

    STM32最小系统硬件组成详解 0组成: 电源   复位   时钟    调试接口  启动 1.电源 : 一般3.3V  LDO供电   加多个0.01uf去耦电容   2.复位:有三种复位方式:上电 ...

  3. 数学建模——智能优化之遗传算法详解Python代码

    数学建模--智能优化之遗传算法详解Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib import ...

  4. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  5. TOPSIS(逼近理想解)算法原理详解与代码实现

    写在前面: 个人理解:针对存在多项指标,多个方案的方案评价分析方法,也就是根据已存在的一份数据,判断数据中各个方案的优劣.中心思想是首先确定各项指标的最优理想值(正理想值)和最劣理想值(负理想解),所 ...

  6. 一文速学数模-时序预测模型(四)二次指数平滑法和三次指数平滑法详解+Python代码实现

    目录 前言 二次指数平滑法(Holt's linear trend method) 1.定义 2.公式 二次指数平滑值: 二次指数平滑数学模型: 3.案例实现 三次指数平滑法(Holt-Winters ...

  7. 组合模式详解附有代码案例分析(包含透明组合模式、安全组合模式的代码示例)

    组合模式 一.组合模式的概念和角色 (一).组合模式的概念 (二).组合模式的角色 二.组合模式的应用场景 三.透明组合模式的代码示例 四.安全组合模式的代码示例 五.组合模式的优缺点 (一).优点 ...

  8. 谱聚类算法详解及代码实现

    谱聚类算法详解及代码实现 文章目录 谱聚类算法详解及代码实现 参考 关于谱聚类介绍 谱聚类概述 谱聚类前置知识 无向权重图 邻接矩阵 度矩阵 拉普拉斯矩阵 相似度矩阵 确定目标函数 初始化目标函数(最 ...

  9. 扫描线填充多边形算法详解与代码

    扫描线填充多边形算法详解与代码 首先给出已知信息:多边形结构体里面包含三个信息:顶点个数,顶点和颜色 class MyPolygon {public:int m_VerticeNumber;CPoin ...

  10. 调包侠福音!机器学习经典算法开源教程(附参数详解及代码实现)

    Datawhale 作者:赵楠.杨开漠.谢文昕.张雨 寄语:本文针对5大机器学习经典算法,梳理了其模型.策略和求解等方面的内容,同时给出了其对应sklearn的参数详解和代码实现,帮助学习者入门和巩固 ...

最新文章

  1. java爬树方法_Java-grandMother.java
  2. MySQL的4中隔离级别
  3. 【面试必备】静态路由与配置相关知识点详解
  4. ZOJ 1048|POJ 1004|HDU1064 Financial Management
  5. 【sprinb-boot】maven 多模块项目:单独 spring-boot:run 某个模块
  6. mysql5.0varchar_MySQL中varchar类型在5.0.3后的变化
  7. python信息传送管道_python – 获取返回管道输入的命令
  8. dubbo源码 -- 服务导出
  9. 配置思科交换机冗余链路汇聚
  10. linux网桥动态ip,使用Linux主机当网桥
  11. android 好用的工具,8款好玩实用APP推荐(安卓)
  12. excel流程图折线箭头_如何绘制excel箭头图形
  13. 顶部标题栏的布局设计
  14. c语言 end while,C语言报错:error: expected ‘while’ at end of input } ^
  15. CSS3炫酷的发光文字 可自定义文字色彩
  16. 毕业设计-基于微信小程序的电影票网购系统
  17. ADS designguide无法使用解决办法
  18. Linux 服务器一键测速脚本工具:GreenBench
  19. linux 添加快捷命令,linux 添加快捷指令
  20. (智能间距换行均满足)Excel中单元格批量调整行间距,行高自动适应内容,且自动换行

热门文章

  1. 单片机设计 指纹识别系统
  2. Matisse图片选择
  3. 飞秋在使用高分辨率的显示器时字体太小,应该这样设置就和以前一样
  4. (Codeforces800Div2)B. Paranoid String(思维/动态规划)
  5. android 那个桌面好,Hola桌面 可能是最好用的安卓手机桌面
  6. 朋友圈微信投票很麻烦?python开发个自动化刷票脚本,再也不用头痛了!
  7. unity ToggleGroup和Toggle.isOn的坑
  8. Windows10专业版重装系统教程
  9. oracle hugepage设置,Linux系统下快速配置HugePages的完整步骤
  10. 一个基于Angular4+Bootstrap4+Scss的后台管理系统界面