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 相关文章推荐
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
详解python里使用正则表达式的分组命名方式
Oct 24 Python
django实现登录时候输入密码错误5次锁定用户十分钟
Nov 05 Python
浅谈Python实现Apriori算法介绍
Dec 20 Python
Django rest framework工具包简单用法示例
Jul 20 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
python实现文件助手中查看微信撤回消息
Apr 29 Python
python将字符串转换成json的方法小结
Jul 09 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
python实现简单反弹球游戏
Apr 12 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 APC的安装与使用详解
2013/06/13 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php获取域名的google收录示例
2014/03/24 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
详解PHP中的Traits
2015/07/29 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
python中实现字符串翻转的方法
2018/07/11 Python
django自带调试服务器的使用详解
2019/08/29 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
售后前台接待岗位职责
2015/04/03 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
律政俏佳人观后感
2015/06/09 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
导游词之上海豫园
2019/10/24 职场文书
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers
关于MySQL中explain工具的使用
2023/05/08 MySQL