贪心算法1——找零钱问题
贪心算法是一种不追求最优解,只希望找到较为满意解的方法。贪心算法省去了为找最优解要穷尽所有可能而必须耗费的大量时间,因此它一般可以快速得到比较满意的解。
贪心算法常以当前情况做最优选择,而不考虑各种可能的情况没所以贪心算法不需要回溯。
找零钱问题
人民币的面额有100元、50元、10元、5元、2元、1元等。在找零钱时,可以有很多中方案。例如146的找零方案如下:
(1)100+20+20+5+1
(2)100+20+10+10+5+1
(3)100+20+10+10+2+2+2
(4)100+10+10+10+10+1+1+1+1+1+1
【分析】
利用贪心算法,则选择的是第1种方案,首先选择一张面额最大的人民币,即100元面额的,然后在剩下的46元中选择面额最大的20元。依次选择的都是局部最优解。
code:
#include<stdio.h>
#include <iostream>
#define N 60
int exchage(float n, float *a, int c, float *r);
void main()
{float rmb[] = { 100,50,20,10,5,2,1,0.5,0.2,0.1 };int n = sizeof(rmb) / sizeof(rmb[0]), k, i;float change, r[N];;printf("请输入要找的零钱数:");scanf("%f", &change);for (i = 0; i < n; i++)if (change >= rmb[i])break;k = exchage(change, &rmb[i], n - i, r);if (k <= 0)printf("找不开!\n");else{printf("找零钱的方案:%.2f=", change);if (r[0] >= 1.0)printf("%.0f", r[0]);elseprintf("%.2f", r[0]);for (i = 1; i < k; i++){if (r[i] >= 1.0)printf("+%.0f", r[i]);elseprintf("+%.2f", r[i]);}printf("\n");}system("pause");
}
int exchage(float n, float *a, int c, float *r)
{int m;if (n == 0.0) /*能分解,分解完成*/return 0;if (c == 0) /*不能分解*/return -1;if (n < *a)return exchage(n, a + 1, c - 1, r); /*继续寻找合适的面值*/else{*r = *a; /*将零钱保存到r中*/m = exchage(n - *a, a, c, r + 1); /*继续分解剩下的零钱*/if (m >= 0)return m + 1; /*返回找零的零钱张数*/return -1;}
}
结果:
贪心算法1——找零钱问题相关推荐
- C++贪心算法求解找零钱问题(很形象)
贪心算法求解找零钱问题 1.什么是贪心算法? 贪心算法是一种策略,总是做出在当前看来是最好的选择,总结出来几个字:寻找最优解 举个例子来说就是:"有一个只能往前走的果园,里边有各种水果让你免 ...
- 贪心算法解决找零钱问题
4.1 找零问题 问题描述: 设有50.20.10.5.1.0.5.0.1等面额的零钱,顾 客购物花了n元,在支付(n / 100 + 1) * 100元后,收银员应如何找 零,才能使找回的钱数最少. ...
- c语言贪心算法零钱问题,贪心算法(2)——找零钱问题
一.找零钱问题 例题1: 有 1 元,5元,10元,20元,100元,200元的钞票无穷多张.现在使用这些钞票支付X元,最少需要多少张钞票. X = 628 最佳支付方法: 3张200块的,1张20块 ...
- 贪心算法之找硬币问题
贪心算法之找硬币问题 题目: 假设有面值为5元.2元.1元.5角.2角.1角(折半查找排序)的货币,需要找给顾客4元6角现金,为使付出的货币的数量最少,如何付款? 贪心算法的思想: 只根据当前的信息就 ...
- Java实现 蓝桥杯 算法训练 找零钱
试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...
- python换零钱_黄哥Python, 贪心算法解决换零钱问题
下面的文字来源于维基百科 贪心算法(英语:greedy algorithm) 又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法.比如 ...
- 【java】【贪心算法】换零钱问题
package 换零钱; /*** @author naru* 编写时间: 2021年3月10日* 类名:零钱问题* 题目描述:整钱换零钱问题.输入给定的钱数(double型),输出最少的人民币支出形 ...
- html网页代码实现找零钱,算法训练 找零钱
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而 ...
- 【算法分析与设计】实验 动态规划算法解决找零钱问题
问题描述 设有 n n n种不同面值的硬币,各硬币的面值存于数组 T [ 1 : n ] T[1:n] T[1
最新文章
- micropython mqtt_MicroPython使用MQTT协议接入OneNET云平台
- ps怎么把一个颜色替换成另一个颜色_图标设计,用PS制作一款小清新的拟物时钟...
- 周伯文对话斯坦福教授曼宁:人机对话智能新进展需要新“图灵测试”
- 论网站更新与seo优化的关系
- VMware Identity Manager 与CAS, Keycloak的集成
- linux下centos安装mysql数据库_Linux CentOS 下的MySQL数据库安装与配置-阿里云开发者社区...
- canvas 在线画图
- mysql 单机双实列_{ mysql } MySQL单机多实例及主从复制
- Spark Streaming的工作机制
- Cookie、Session、Token、JWT分别是什么(一)
- android 悬浮按钮 功能实现,Android自定义悬浮按钮效果实现,带移动效果
- 验证手机号码的JS方法
- 规则绝对公平时,社会财富的流向谁?
- 【路径规划】基于matlab多种算法无人机路径规划【含Matlab源码 1263期】
- 多功能网页刷新助手(刷PV)
- 在Linux上下载arduino
- 《电路》邱关源 思维导图 第四章-电路定理
- Redis学习之hget命令
- pdf转换器电脑版免费,好用的办公操作软件集合
- diy 服务器 支持 esxi,【我的技术我做主】IT屌丝DIY ESXI虚拟化服务器再度升级ESXI6.0...