贪心之钱币找零问题
来源:互联网 发布:linux弱口令扫描工具 编辑:程序博客网 时间:2024/05/16 02:55
问题描述:
假设1元、2元、5元、10元、20元、50元、100元的纸币分别有c0, c1, c2, c3, c4, c5, c6张。现在要用这些钱来支付K元,至少要用多少张纸币?
问题分析:
用贪心算法的思想,很显然,每一步尽可能用面值大的纸币即可。在日常生活中我们自然而然也是这么做的。在程序中已经事先将Value按照从小到大的顺序排好。
代码:
#include<iostream> #include<algorithm> using namespace std; const int N=7; int countt[N]={3,0,2,1,0,3,5}; int value[N]={1,2,5,10,20,50,100}; int main() { int money,fee=0,sum=0; cin>>money; int i=N-1; while( fee != money ) {// cout<< fee + value[i] <<endl; while( fee + value[i] <= money && countt[i] > 0 ) { fee += value[i];// cout<<fee<<endl; sum++; } if( fee == money ) { cout<<sum; return 0; } i--; if( i < 0 ) { cout<<"No solution"; return 0; } }}
上面的代码用了while来获取某一面之钱币所用数量,而下面这个代码则直接用了整除的方法,更加简单。
#include<iostream> #include<algorithm> using namespace std; const int N=7; int Count[N]={3,0,2,1,0,3,5}; int Value[N]={1,2,5,10,20,50,100}; int solve(int money) { int num=0; for(int i=N-1;i>=0;i--) { int c=min(money/Value[i],Count[i]); money=money-c*Value[i]; num+=c; } if(money>0) num=-1; return num; } int main() { int money; cin>>money; int res=solve(money); if(res!=-1) cout<<res<<endl; else cout<<"NO"<<endl; }
阅读全文
0 0
- 贪心之钱币找零问题
- 贪心算法之钱币找零问题
- 钱币找零问题
- 贪心算法实例(二):钱币找零问题
- 贪心算法_钱币找零
- 用贪心法找零问题
- 贪心算法的找零问题
- 使用贪心算法实现硬币找零问题
- 贪心算法实现找零问题求解
- 贪心算法算法导论 找零问题
- 贪心算法解硬币找零问题
- JS贪心解法入门:找零问题
- 动态规划之找零问题
- 动态规划之找零问题
- 人民币找零 vs 硬币问题 贪心 vs 动态规划
- 算法第四节:贪心算法解决“超市找零方案”问题
- 完全背包之钱币兑换问题
- ACM动态规划之最少钱币问题
- Eclipse中JDK与JRE区别
- Swift-UIButton规避重复点击
- java使用qq发送邮件
- 廖雪峰的Python-返回函数
- CentOS修改Tomcat端口号
- 贪心之钱币找零问题
- 循环冗余检验CRC(Cyclic Redundancy Check)
- KMP算法java实现
- SpringBoot Junit 测试加载 xml 读取 bean 失败
- fig11_06.cpp
- Java通用与进阶知识,仅用于自身补充
- JAVA高级特性:泛型
- Java多线程之Executor框架
- http(2)