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实现给qq邮箱发送邮件的方法
May 28 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
使用python socket分发大文件的实现方法
Jul 08 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
Pytorch之保存读取模型实例
Dec 30 Python
python如何停止递归
Sep 09 Python
python利用opencv保存、播放视频
Nov 02 Python
python数字图像处理之图像的批量处理
Jun 28 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图片验证码代码
2008/03/27 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
JavaScript 特殊字符
2007/04/05 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
Vue 配合eiement动态路由,权限验证的方法
2018/09/26 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
初中美术教学反思
2014/01/29 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
《称象》教学反思
2014/04/25 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
2015年公司新年寄语
2014/12/08 职场文书
升学宴答谢词
2015/01/05 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL