当前位置: 首页 > news >正文

贪心算法之找零钱

贪心算法是一种在每一步选择中都采取在当前状态下最优的选择,从而希望能够得到全局最优解的算法策略。下面是一个经典的贪心算法实例:找零钱问题

找零钱问题

假设你是一个收银员,需要找零给客户。你有以下面额的硬币:1元、5元、10元、25元。现在需要找零 n 元钱,问如何用最少的硬币数量找零?

#include <iostream>
#include <vector>std::vector<int> makeChange(int amount) {std::vector<int> coins = {25, 10, 5, 1};  // 硬币面额std::vector<int> result;  // 存储找零的硬币for (int coin : coins) {while (amount >= coin) {result.push_back(coin);amount -= coin;}}return result;
}int main() {int amount = 63;std::vector<int> change = makeChange(amount);std::cout << "Change for " << amount << " cents: ";for (int coin : change) {std::cout << coin << " ";}std::cout << std::endl;return 0;
}
逐行解释:
  1. makeChange 函数:这个函数接受一个整数 amount 作为参数,代表需要找零的金额。在函数内部,我们定义了一个硬币面额的向量 coins,然后通过贪心算法,从面额最大的硬币开始尽可能多地找零,直到找完为止。

  2. main 函数:在主函数中,我们设定了需要找零的金额为63,然后调用 makeChange 函数计算找零的硬币。最后,输出找零的结果。

这个例子中,贪心算法的思路是每次选择面额最大的硬币,以尽可能减少硬币的数量。在这个问题中,贪心算法的选择是合理的,因为硬币的面额是整除关系,可以保证每次选择的硬币都是最优解。然而,并非所有问题都适合贪心算法,因为它不一定能得到全局最优解。

相关文章:

  • openJudge | 距离排序 C语言
  • OCP使用web console创建和构建应用
  • 设计模式理解:单例模式+工厂模式+建设者模式+原型模式
  • macbook电脑如何永久删除app软件?
  • 使用C#快速创建一个非常实用的桌面应用程序
  • 设计模式-建造者模式Builder
  • 【开源】SpringBoot框架开发桃花峪滑雪场租赁系统
  • Linux cksum命令教程:如何使用cksum命令检查文件完整性(附实例详解和注意事项)
  • 选择大语言模型:2024 年开源 LLM 入门指南
  • 【电路笔记】-并联电感
  • STM32自学☞PWM驱动舵机(按键控制)
  • ubuntu快速安装miniconda
  • Python学习之路-爬虫提高:常见的反爬手段和解决思路
  • 课程大纲:图像处理中的矩阵计算
  • TCP 粘包/拆包
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • canvas 绘制双线技巧
  • co模块的前端实现
  • Docker容器管理
  • js写一个简单的选项卡
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Mysql数据库的条件查询语句
  • XML已死 ?
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 将回调地狱按在地上摩擦的Promise
  • 利用DataURL技术在网页上显示图片
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用common-codec进行md5加密
  • 追踪解析 FutureTask 源码
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​力扣解法汇总946-验证栈序列
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $GOPATH/go.mod exists but should not goland
  • (27)4.8 习题课
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十六)串口UART
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)Android布局类型(线性布局LinearLayout)
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • ... 是什么 ?... 有什么用处?
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET建议使用的大小写命名原则
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • /dev/sda2 is mounted; will not make a filesystem here!
  • /etc/sudoers (root权限管理)
  • @Autowired标签与 @Resource标签 的区别
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [20190113]四校联考