Python贪心算法实例小结


Posted in Python onApril 22, 2018

本文实例讲述了Python贪心算法。分享给大家供大家参考,具体如下:

1. 找零钱问题:假设只有 1 分、 2 分、五分、 1 角、二角、 五角、 1元的硬币。在超市结账 时,如果 需要找零钱, 收银员希望将最少的硬币数找给顾客。那么,给定 需要找的零钱数目,如何求得最少的硬币数呢?

# -*- coding:utf-8 -*-
def main():
  d = [0.01,0.02,0.05,0.1,0.2,0.5,1.0] # 存储每种硬币面值
  d_num = [] # 存储每种硬币的数量
  s = 0
  # 拥有的零钱总和
  temp = raw_input('请输入每种零钱的数量:')
  d_num0 = temp.split(" ")
  for i in range(0, len(d_num0)):
    d_num.append(int(d_num0[i]))
    s += d[i] * d_num[i] # 计算出收银员拥有多少钱
  sum = float(raw_input("请输入需要找的零钱:"))
  if sum > s:
    # 当输入的总金额比收银员的总金额多时,无法进行找零
    print("数据有错")
    return 0
  s = s - sum
  # 要想用的钱币数量最少,那么需要利用所有面值大的钱币,因此从数组的面值大的元素开始遍历
  i = 6
  while i >= 0: 
    if sum >= d[i]:
      n = int(sum / d[i])
      if n >= d_num[i]:
        n = d_num[i] # 更新n
      sum -= n * d[i] # 贪心的关键步骤,令sum动态的改变,
      print("用了%d个%f元硬币"%(n, d[i]))
    i -= 1
if __name__ == "__main__":
  main()

2. 求最大子数组之和问题:给定一个整数数组(数组元素有负有正),求其连续子数组之和的最大值。

# -*- coding:utf-8 -*-
def main():
  s = [12,-4,32,-36,12,6,-6]
  print("定义的数组为:",s)
  s_max, s_sum = 0, 0
  for i in range(len(s)):
    s_sum += s[i]
    if s_sum >= s_max:
      s_max = s_sum # 不断更新迭代s_max的值,尽可能的令其最大
    elif s_sum < 0:
      s_sum = 0
  print("最大子数组和为:",s_max)
if __name__ == "__main__":
  main()

3. 一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。 对于给定的n(n <= 5000)和k(k <= 1000)个加油站位置,编程计算最少加油次数。

# 设汽车加满油后可行驶n公里,且旅途中有k个加油站
def greedy():
  n = 100
  k = 5
  d = [50,80,39,60,40,32]
  # 表示加油站之间的距离
  num = 0
  # 表示加油次数
  for i in range(k):
    if d[i] > n:
      print('no solution')
      # 如果距离中得到任何一个数值大于n 则无法计算
      return 
  i, s = 0, 0
  # 利用s进行迭代
  while i <= k:
    s += d[i]
    if s >= n:
      # 当局部和大于n时则局部和更新为当前距离
      s = d[i]
      # 贪心意在令每一次加满油之后跑尽可能多的距离
      num += 1
    i += 1
  print(num)
if __name__ == '__main__':
  greedy()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python数据结构之Array用法实例
Oct 09 Python
Python中的Matplotlib模块入门教程
Apr 15 Python
200行自定义python异步非阻塞Web框架
Mar 15 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
基于python的ini配置文件操作工具类
Apr 24 Python
Python玩转加密的技巧【推荐】
May 13 Python
Django 请求Request的具体使用方法
Nov 11 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
快速解释如何使用pandas的inplace参数的使用
Jul 23 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 Python
利用python绘制正态分布曲线
Jan 04 Python
Python实战之实现简易的学生选课系统
May 25 Python
python 判断网络连通的实现方法
Apr 22 #Python
Python3之读取连接过的网络并定位的方法
Apr 22 #Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 #Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 #Python
selenium+python实现自动登录脚本
Apr 22 #Python
python实现校园网自动登录的示例讲解
Apr 22 #Python
用Python写一段用户登录的程序代码
Apr 22 #Python
You might like
PHP自毁程序(慎用)
2015/07/09 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
PHP制作用户注册系统
2015/10/23 PHP
php实现倒计时效果
2015/12/19 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
jQuery通过Ajax返回JSON数据
2015/04/28 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python中的lstrip()方法使用简介
2015/05/19 Python
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Flask配置Cors跨域的实现
2019/07/12 Python
使用Python构造hive insert语句说明
2020/06/06 Python
python如何调用百度识图api
2020/09/29 Python
Python脚本调试工具安装过程
2021/01/11 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
环境科学专业个人求职信
2013/09/26 职场文书
自荐信要包含哪些内容
2013/11/06 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
公证处委托书
2015/01/28 职场文书
高中班长竞选稿
2015/11/20 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
python前后端自定义分页器
2022/04/13 Python