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和php通信乱码问题解决方法
Apr 15 Python
Python fileinput模块使用介绍
Nov 30 Python
python获取元素在数组中索引号的方法
Jul 15 Python
Python模拟登陆实现代码
Jun 14 Python
Python 网页解析HTMLParse的实例详解
Aug 10 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
python实现转圈打印矩阵
Mar 02 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
python3 xpath和requests应用详解
Mar 06 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
Python使用graphviz画流程图过程解析
Mar 31 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多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
PHP实现懒加载的方法
2015/03/07 PHP
项目实践之javascript技巧
2007/12/06 Javascript
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
easy_install python包安装管理工具介绍
2013/02/10 Python
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
python求列表交集的方法汇总
2014/11/10 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
Python代码需要缩进吗
2020/07/01 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
优秀教师工作感言
2014/02/16 职场文书
活动总结报告怎么写
2014/07/03 职场文书
授权委托书范文
2014/07/31 职场文书
开展创先争优活动总结
2014/08/28 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
面试通知短信
2015/04/20 职场文书
仙境之桥观后感
2015/06/16 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书