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程序实例(通讯录)
Nov 29 Python
Python程序设计入门(5)类的使用简介
Jun 16 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
python re模块findall()函数实例解析
Jan 19 Python
python中的for循环
Sep 28 Python
关于python字符串方法分类详解
Aug 20 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
Django密码存储策略分析
Jan 09 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
Python使用random模块实现掷骰子游戏的示例代码
Apr 29 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
PHP+APACHE实现用户论证的方法
2006/10/09 PHP
浅谈php命令行用法
2015/02/04 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
[01:04:30]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python实现控制台输入密码的方法
2015/05/29 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
Django中使用locals()函数的技巧
2015/07/16 Python
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
教师节促销活动方案
2014/02/14 职场文书
预备党员承诺书
2014/03/25 职场文书
交通工程专业推荐信
2014/09/06 职场文书
大学生个人学习总结
2015/02/15 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android