问题描述

你是一家超市的收银员,如果客人买了37元的东西,并且给了你100元,请问如何才能找到 给客人数量最少零钱,

如现有1,2,5,10,21,25 这些种类的零钱,最优的是,21,21,21 数量为3 .

思路解析

递归操作:每一次寻找可以用一张纸币去找零,如果不能够找零,则 找到所有<=该值的纸币,减去该纸币的值,再进行递归。

import time

#递归

def rec(coinValueList,change):

minCoins=change

if change in coinValueList:

return 1

else:

for i in [c for c in coinValueList if c <=change]:

numCoins =1 + rec(coinValueList,change-i)

if numCoins

minCoins=numCoins

return minCoins

t0=time.time()

x=rec([1,5,10,25,22],63)

print(x)

t1=time.time()

print("time:",t1-t0)

result:

image.png

从运行结果来看,这个递归耗时较长,因为做了过多的重复运算

2改进 使用 一个列表来存储 每一个值的最小数量的状态。

import time

def rec_ch(coinValueList,change,knownResult):

minCoins=change

if change in coinValueList:

knownResult[change]=1 #存储状态

return 1

elif knownResult[change]>0:

return knownResult[change]

else:

for i in [c for c in coinValueList if c <=change]:

numCoins =1 + rec_ch(coinValueList,change-i,knownResult)

if numCoins

minCoins=numCoins

knownResult[change]=minCoins

return minCoins

t0=time.time()

list1=[0]*64

y=rec_ch([1,5,10,25,22],63,list1)

print(y)

print(list1)

t1=time.time()

print("time:",t1-t0)

result:

image.png

3 动态规划 ,我们把2步骤的方法整理一下。

def dp(coinValueList,change,minCoins,coinUsed):

for cents in range(change+1):

coinCount=cents

newCoin = 1

for j in [c for c in coinValueList if c <=cents]:

if minCoins[cents-j]+1

coinCount=minCoins[cents-j]+1

newCoin=j

minCoins[cents]=coinCount

coinUsed[cents]=newCoin

return minCoins[change]

def printCoins(coinUsed,change):

coin=change

while coin>0:

thisCoin=coinUsed[coin]

print(thisCoin)

coin=coin- thisCoin

t0=time.time()

list1=[0]*64

coinUsed=[0]*64

y=dp([1,5,10,25,22],63,list1,coinUsed)

print(y)

#print(list1)

t1=time.time()

print("time:",t1-t0)

printCoins(coinUsed,63)

result:

image.png

参考:Python数据结构与算法分析 (布拉德利 • 米勒 戴维 • 拉努姆)

python实现找零钱_找零钱的最优步骤 探究(python)相关推荐

  1. c语言python零基础教学_编程零基础应当如何开始学习 Python?附教程

    零基础学编程,用python入门是个不错的选择,虽然国内基本上还是以c语言作为入门开发语言,但在国外,已经有很多的学校使用python作为入门编程语言.此外,python在机器学习,人工智能领域也非常 ...

  2. python中文分词工具_结巴中文分词工具的安装使用 Python分词教程

    结巴分词 中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 1.基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) ...

  3. python怎么开始编程_编程零基础应当如何开始学习 Python?

    这是一篇介绍Python如何入门的文章,对于没有任何编程经验甚至不懂电脑的新手都是非常实用的.会从计算机的使用开始讲解,中间搭配一些经典的针对知识点的练习,最终大家都可以用Python开发出一个小游戏 ...

  4. python十大重点_你见过的最全面的 Python 重点

    由于总结了太多的东西,所以篇幅有点长,这也是我'缝缝补补'总结了好久的东西. Py2 VS Py3print成为了函数,python2是关键字 不再有unicode对象,默认str就是unicode ...

  5. sas和python哪个更容易_我该选择谁?SAS VS Python

    很多入门数据分析和数据挖掘的人士都在纠结我到底应该选择哪款软件?今天我们来比较一下老牌软件SAS和新起之秀Python在各方面的性能. 2016-8-19 10:37:21 上传 下载附件 (10.0 ...

  6. python 智能识别 商品_阿里云货架商品识别与管理Python SDK使用示例-阿里云开发者社区...

    概述 货架商品识别与管理(Retail Image Recognition)是基于深度学习.图像检测.图像识别等技术,为新零售品牌商/经销商提供AI商品识别能力的阿里云产品:适用于货架商品识别.陈列识 ...

  7. python第一章测试题_第一章 测试【含答案】 Python大数据分析

    (1)单选题 python中,常见的结构化数据不包括( ) A  表格型数据 B  多维数组 C  通过关键列相互联系的多个表 D  序列 E  图像数据 (2)单选题 下列不是数据分析的方法有( ) ...

  8. 树莓派python交互界面实例_玩转树莓派-RaspBerry,使用Python开发定制界面

    1 准备SD卡8G以上,16G更佳. 编译过程中,会耗用大量存储空间.一定在编译之前运行sudo raspi-config,选择expand file system扩展SD卡的分区. 如果空间不够,会 ...

  9. python内存池机制_看过来啦!教你用Python进行内存管理

    原标题:看过来啦!教你用Python进行内存管理 现在学Python的小伙伴有很多啦!Python语言的发展前景也是有目共睹.小助手今天为大家带来了Python中内存管理的方法,一起来学习一下吧~ P ...

  10. python代码没有反应_没有任何编程经验者不要被Python简明手册误导。

    想学python,没有任何编程经验者不要被python简明手册误导. 1.python简明手册是一本好书 但这本书是针对有经验的程序员看的,详细一点说,有3年以上c++/java,.delphi/vb ...

最新文章

  1. 人工智能的核心是“算法”,医生才是主角!
  2. JAVA JDK老版本删除不彻底,环境变量设置无效,如何彻底卸载JAVA环境?
  3. VTK读取序列化图像
  4. Angular 里 unknown 和 any 的区别
  5. JS 中 call()、apply()、bind() 的用法
  6. JS里面的懒加载(lazyload)
  7. 创建线程都有哪些方式?— Callable篇
  8. 6.深度学习练习:Initialization
  9. 添加python的系统路径_如何将项目路径添加到系统路径永久地?
  10. 主成分分析的可视化展示
  11. 【强烈推荐】如何解决JQuery类Post方式的跨域问题 - 空山雪林通用模块设计工作室 - ITeye技术网站...
  12. 零基础学python知乎-35岁了零基础自学Python可行吗?
  13. 基于单片机的空气质量监测系统设计
  14. 10分钟接入腾讯验证码验证平台
  15. [词根词缀]eco/ego/electr的由来及词源知识E
  16. 如何使用 Python 将 Nifti 文件转换为 Dicom 系列
  17. 天行数据-API调用
  18. 关于npm i 的那点事
  19. 二手书市场的快速增长:多抓鱼产品分析报告
  20. MySQL | 自定义函数

热门文章

  1. 2022-2028年中国橡胶漆产业发展动态及未来趋势预测报告
  2. Facebook 发布深度学习工具包 PyTorch Hub,让论文复现变得更容易
  3. VS Code搭建C/C++开发环境超详细教程
  4. 不是都需要ARM吗?
  5. 基于区域的CNN(R-CNN)
  6. Python脚本语言写法
  7. 2021年大数据Spark(四十八):Structured Streaming 输出终端/位置
  8. TypeError: showInformation() missing 1 required positional argument: ‘self‘
  9. RecyclerView 判断滑动到顶部和底部
  10. ndk 路径修改 超简单的方法