python贪心算法实现(纸币找零举例)

目录

问题描述

贪心策略

Python代码实现

代码解释

示例输出

注意事项


问题描述

给定一组纸币面值和一个目标金额,找出用最少数量的纸币来找零的方法。

贪心策略

每次选择面值最大的纸币,直到无法继续选择为止。

Python代码实现

def min_bills(bills, amount):# 对纸币面值进行降序排序bills.sort(reverse=True)# 初始化结果列表,用于存储每种纸币的数量result = []# 遍历每种纸币for bill in bills:# 计算当前纸币的最大使用数量count = amount // bill# 更新剩余金额amount -= count * bill# 将当前纸币的数量添加到结果列表中result.append((bill, count))# 如果剩余金额为0,提前结束循环if amount == 0:break# 返回结果列表和是否成功找零if amount == 0:return resultelse:return "无法用给定的纸币找零"# 示例
bills = [100, 50, 20, 10, 5, 1]
amount = 163
result = min_bills(bills, amount)if isinstance(result, list):print("最少纸币数为:", sum([count for _, count in result]))print("具体组合为:", result)
else:print(result)

代码解释

  1. 排序:首先对纸币面值进行降序排序,确保每次选择最大面值的纸币。
  2. 初始化结果列表:用于存储每种纸币的数量。
  3. 遍历纸币:对于每种纸币,计算可以使用的最大数量,并更新剩余金额。
  4. 检查剩余金额:如果剩余金额为0,表示已经成功找零,提前结束循环。
  5. 返回结果:如果成功找零,返回结果列表;否则返回无法找零的提示。

示例输出

最少纸币数为: 6
具体组合为: [(100, 1), (50, 1), (20, 0), (10, 1), (5, 0), (1, 3)]

注意事项

  • 贪心算法在这种情况下通常能找到最优解,因为纸币面值的设计通常允许贪心算法找到最少数量的纸币。
  • 在实际应用中,可以根据具体问题调整贪心策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习日志011--模块,迭代器与生成器,正则表达式

一、python模块 在之前学习c语言时,我们学了分文件编辑,那么在python中是否存在类似的编写方式?答案是肯定的。python中同样可以实现分文件编辑。甚至还有更多的好处: ‌提高代码的可维护性‌:当代码被分成多个文件时…

idea 弹窗 delete remote branch origin/develop-deploy

想删除远程分支,就选delete,仅想删除本地分支,选cancel; 在 IntelliJ IDEA 中遇到弹窗提示删除远程分支 origin/develop-deploy,这通常是在 Git 操作过程中出现的情况,可能是在执行如 git branch -d 或其他…

湘潭大学软件工程算法设计与分析考试复习笔记(一)

文章目录 前言随机类(第七章)随机概述数值随机化舍伍德拉斯维加斯蒙特卡罗 模拟退火遗传人工神经网络 回溯(第五章)动态规划(第四章)后记 前言 考试还剩十一天,现在准备开始复习这门课了。好像全…

Python常用魔术方法 (学习笔记)

文章目录 一、魔术方法是什么?二、使用步骤1.__ str __(self):2.__ lt__(self):3. __ le __(self):4. __ eq __(self): 总结 一、魔术方法是什么? 在Python中,魔术方法(也称为特殊方法或双下划线方法)是一类具有特殊用…

手写模拟Spring Boot自动配置功能

引言 随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效…

Linux性能优化之火焰图的起源

Linux火焰图的起源与性能优化专家 Brendan Gregg 密切相关,他在 2011 年首次提出这一工具,用于解决性能分析过程中可视化和数据解读的难题。 1. 背景:性能优化的需求 在现代计算中,性能优化往往需要对程序执行中的热点和瓶颈进行…

【论文精读】GOT-OCR2.0源码论文——打破传统OCR流程的多模态视觉-语言大模型架构:预训练VitDet 视觉模型+ 阿里通义千问Qwen语言模型

作为本系列的开篇文章,首先定下本系列的整体基调。论文精读系列,旨在记录研读深度学习、强化学习相关论文的个人心得和理解,仅供参考,欢迎指正错误和研究探讨。 所有文章只会摘选论文部分进行分析,且不一定按原文行文顺…

动态规划之股票系列

123. 买卖股票的最佳时机 III 188. 买卖股票的最佳时机 IV 309. 买卖股票的最佳时机含冷冻期 1.AC代码: class Solution {public int maxProfit(int[] prices) {int nprices.length;int[][] dpnew int[n][5];dp[0][1]-prices[0];dp[0][3]-prices[0];for(int i1;i<n;i){/…

使用 Qt 实现基于海康相机的图像采集和显示系统(不使用外部视觉库,如Halcon\OpenCv)[工程源码联系博主索要]

本文将梳理一个不借助外部视觉库&#xff08;如 OpenCV/Halcon&#xff09;的海康相机图像采集和显示 Demo。该程序直接使用 Qt GUI 来显示图像。通过海康 MVS SDK 实现相机的连接、参数设置、图像采集和异常处理等功能&#xff0c;并通过 Qt 界面展示操作结果。 1. 功能概述 …

在Ubuntu22.04上源码构建ROS noetic环境

Ubuntu22.04上源码构建ROS noetic 起因准备环境创建工作目录并下载源码安装编译依赖包安装ros_comm和rosconsole包的两个补丁并修改pluginlib包的CMakeLists的编译器版本编译安装ROS noetic和ros_test验证 起因 最近在研究VINS-Mono从ROS移植到ROS2&#xff0c;发现在编写feat…

C++——类和对象(part2)

前言 本篇博客继续为大家介绍类与对象的知识&#xff0c;承接part1的内容&#xff0c;本篇内容是类与对象的核心内容&#xff0c;稍微有些复杂&#xff0c;如果你对其感兴趣&#xff0c;请继续阅读&#xff0c;下面进入正文部分。 1. 类的默认成员函数 默认成员函数就是用户…

matlab实现主成分分析方法图像压缩和传输重建

原创 风一样的航哥 航哥小站 2024年11月12日 15:23 江苏 为了研究图像的渐进式传输技术&#xff0c;前文提到过小波变换&#xff0c;但是发现小波变换非常适合传输缩略图&#xff0c;实现渐进式传输每次传输的数据量不一样&#xff0c;这是因为每次变换之后低频成分大约是上一…

【HarmonyOS】鸿蒙系统在租房项目中的项目实战(二)

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

Scala-字符串(拼接、printf格式化输出等)-用法详解

Scala 一、 使用 号连接字符串 在 Scala 中&#xff0c; 运算符实际上会调用 String 类的 concat 方法或者使用字符串的加法操作&#xff0c;生成一个新的字符串。 字符串是不可变的&#xff0c;每次拼接都会创建一个新的字符串。 Mr. yuTips&#xff1a; 性能相对较差&…

ISCTF2024

ezlogin 源码审计 先审源码,纯js题 const express require(express); const app express(); const bodyParser require(body-parser); var cookieParser require(cookie-parser); var serialize require(node-serialize); app.use(bodyParser.urlencoded({ e…

Mac Java 使用 tesseract 进行 ORC 识别

在 Java 开发中使用图片转文字时&#xff0c;难免会遇到问题&#xff0c;比如我使用 Mac (M1 芯片) 系统进行开发&#xff0c;就出现报错。 博主博客 https://blog.uso6.comhttps://blog.csdn.net/dxk539687357 一、直接使用 1. 使用 brew 进行安装 brew install tesseract…

策略模式-策略模式在不同支付工具中的应用

策略模式中主要有以下角色 抽象策略接口 具体策略实现 1. 定义策略接口 /*** @desc 支付抽象类**/ public interface Pay {/*** 缓存支付方式和对应的支付策实现对象*/Map<String, Pay> payMap = new HashMap<>();public String payment(); } 2. 定义AliPay具体…

使用真实 Elasticsearch 进行更快的集成测试

作者&#xff1a;来自 Elastic Piotr Przybyl 了解如何使用各种数据初始化和性能改进技术加快 Elasticsearch 的自动化集成测试速度。 在本系列的第 1 部分中&#xff0c;我们探讨了如何编写集成测试&#xff0c;让我们能够在真实的 Elasticsearch 环境中测试软件&#xff0c;并…

MySQL:联合查询(2)

首先写一个三个表的联合查询 查询所有同学的每门课成绩&#xff0c;及同学的个人信息 1.我们首先要确定使用哪些表 学生表&#xff0c;课程表&#xff0c;成绩表 2.取笛卡尔积 select * from score,student,course; 3. 确定表与表之间的联合条件 select * from score,stud…

Vue3学习笔记(下)

文章目录 Vue3学习笔记&#xff08;下&#xff09;组合式API下的父子通信父传子子传父 模板引用defineExpose()provide和injectvue3新特性 - defineOptionsvue3新特性 - defineModelPiniaPinia异步写法 Vue3学习笔记&#xff08;下&#xff09; 组合式API下的父子通信 父传子…