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制作爬虫采集小说
Oct 25 Python
Python定义函数功能与用法实例详解
Apr 08 Python
python日期相关操作实例小结
Jun 24 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 Python
用Python写一个自动木马程序
Sep 17 Python
在Python中使用MySQL--PyMySQL的基本使用方法
Nov 19 Python
Django认证系统user对象实现过程解析
Mar 02 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
Django框架请求生命周期实现原理
Nov 13 Python
python openssl模块安装及用法
Dec 06 Python
python实现腾讯滑块验证码识别
Apr 27 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 zend 相对路径问题
2009/01/12 PHP
php cookis创建实现代码
2009/03/16 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
js实现随机点名小功能
2017/08/17 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python判断变量是否已经定义的方法
2014/08/18 Python
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
Python 文件处理注意事项总结
2017/04/10 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
keras多显卡训练方式
2020/06/10 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
店长职务说明书
2014/02/04 职场文书
大学生社会实践评语
2014/04/25 职场文书
超市开店计划书
2014/04/26 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android