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中列表元素连接方法join用法实例
Apr 07 Python
Python中的进程分支fork和exec详解
Apr 11 Python
python实现的简单FTP上传下载文件实例
Jun 30 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
Python使用functools模块中的partial函数生成偏函数
Jul 02 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
python3实现猜数字游戏
Dec 07 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
python pyenv多版本管理工具的使用
Dec 23 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
最小二乘法及其python实现详解
Feb 24 Python
Python 如何展开嵌套的序列
Aug 01 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基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
PHP速成大法
2015/01/30 PHP
smarty中常用方法实例总结
2015/08/07 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
Joomla开启SEF的方法
2016/05/04 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
JavaScript 学习初步 入门教程
2010/03/25 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
node.js处理前端提交的GET请求
2019/08/30 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
Python3处理文件中每个词的方法
2015/05/22 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
python 用下标截取字符串的实例
2018/12/25 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
Python函数基本使用原理详解
2020/03/19 Python
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
VC++笔试题
2014/10/13 面试题
本科毕业生应聘自荐信范文
2014/06/26 职场文书
田径运动会通讯稿
2014/09/13 职场文书
保研推荐信格式
2015/03/25 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
教师节班会开场白
2015/06/01 职场文书