付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、找零问题贪心算法实现精品文档找零问题贪心算法实现一、实验描述当前有面值分别为2 角 5 分, 1 角, 5 分, 1 分的硬币,请给出找n 分钱的最佳方案(要求找出的硬币数目最少)。二、实验原理具体实例:假如老板要找给我99 分钱,他有上面的面值分别为25,10, 5, 1 的硬币数,为了找给我最少的硬币数,那么他是不是该这样找呢,先看看该找多少个25 分的, 99 253,好像是 3 个,要是 4 个的话,我们还得再给老板一个1分的,我不干,那么老板只能给我3 个 25 分的拉,由于还少给我24,所以还得给我 2个 10分的和 4个1分。具体实现:/找零钱算法/By falcon/输入:数组
2、 m,依次存放从大到小排列的面值数,n 为需要找的钱数,单位全部为分/输出:数组 num,对照数组 m 中的面值存放不同面值的硬币的个数,就找钱方案参考实验代码部分。三、实验代码#ifndef LEASTCOINS_H#define LEASTCOINS_Hclass LeastCoinspublic:LeastCoins();收集于网络,如有侵权请联系管理员删除精品文档LeastCoins();void run();private:int number; /不同面值的硬币个数int TotalMoney; /要找回的总钱数int *T; /存储硬币的面值int *Coins; /硬币的个数i
3、nt *m; / mij是以 最大面值 i 要找回钱数是 j 需要硬币数的最少个数bool input();int changeMoney(int i,int j); / i是 第 i 中硬币void output();void traceback(); /寻找 轨迹;#endif#include <iostream.h>#include <fstream.h>#include <cstdlib>#include <iomanip.h>#define N 10ifstream inputFile("input.txt",ios
4、:out);ofstream outputFile("output.txt",ios:out);LeastCoins:LeastCoins()number=0;TotalMoney=0;T=new int N;Coins=new int N;m=new int *N;for (int i=0;i<N;i+)mi=new int N*N;LeastCoins:LeastCoins()delete T;delete Coins;for (int i=0;i<N;i+)delete mi;delete m;void LeastCoins:run() if (input
5、() changeMoney(number,TotalMoney); output(); bool LeastCoins:input()inputFile>>number;outputFile<<" 有 "<<number<<" 不同的硬币 ."<<endl; outputFile<<setw(4)<<" 面值 "<<setw(7)<<" 个数 "<<endl; int sum=0;收集于网络,如
6、有侵权请联系管理员删除精品文档for (int i=1;i<=number;i+)inputFile>>Ti; inputFile>>Coinsi;outputFile<<setw(3)<<Ti<<setw(3)<<" "<<setw(3)<<Coinsi<<endl;sum+=Ti*Coinsi;inputFile>>TotalMoney;outputFile<<" 需要找回的总钱数为: "<<Total
7、Money<<endl;if (T!=NULL && Coins!=NULL)if (sum>=TotalMoney)return true;elseoutputFile<<" 所有硬币的总钱数是"<<sum<<"小于需要找回的总钱数"<<TotalMoney<<endl;return false;return false;int LeastCoins:changeMoney(int i,int j)if (i>1) if (j<Ti) /要找的钱数
8、小于 该硬币的面值mi-1j=changeMoney(i-1,j);mij=mi-1j;return mij;elseint X=j/Ti;X=(X<Coinsi ? X : Coinsi) ;int T1=changeMoney(i-1,j-X*Ti);int T2=changeMoney(i-1,j-(X-1)*Ti);mi-1j-X*Ti=T1;mi-1j-(X-1)*Ti=T2;if (T1+X)>(T2+X-1)mij=T2+X-1;else mij=T1+X;return mij;else if(i=1)/此时 i=1if (j%T1)=0 && (j/
9、T1<=Coins1)m1j=j/T1;return m1j;else return 1000000;else return 1000000;void LeastCoins:output()if (mnumberTotalMoney<1000000) /判断是否有解outputFile<<" 需要最少的硬币个数是 : "<<mnumberTotalMoney<<endl; outputFile<<setw(4)<<" 面值 "<<setw(7)<<"
10、 个数 "<<endl;traceback();else outputFile<<"无解 "<<endl;收集于网络,如有侵权请联系管理员删除精品文档void LeastCoins:traceback()int j=TotalMoney;for (int i=number;i>=2;i-)int X=j/Ti; /最多需要面值为Ti 的硬币的个数X=(X<Coinsi ? X : Coinsi) ; /取 X 和 Coinsi 的较小值int T1=mi-1j-X*Ti+X;int T2=mi-1j-(X-1)*Ti
11、+X-1;if (T1<T2)outputFile<<setw(3)<<Ti<<setw(3)<<" "<<setw(3)<<X<<endl; j-=X*Ti;elseoutputFile<<setw(3)<<Ti<<setw(3)<<" "<<setw(3)<<(X-1)<<endl;j-=(X-1)*Ti;outputFile<<setw(3)<<Ti<<setw(3)<<" "<<setw(3)&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 动词短语训练课件
- 2026湖北恩施州宣恩县园投人力资源服务有限公司招聘外包服务人员10人备考题库及答案详解(易错题)
- 2026上半年四川成都市温江区考核招聘副高级及以上职称教师7人备考题库及参考答案详解(培优)
- 2026山东烟台市中级人民法院招聘聘用制司法辅助人员8人备考题库附答案详解(研优卷)
- 2026贵州毕节大方大山乡人民政府招聘沙土村安置点自管委主任的1人备考题库及参考答案详解(模拟题)
- 酒店餐饮仪容仪表规范
- 2026广西玉林市北流市妇幼保健院招聘编外人员43人备考题库及参考答案详解(巩固)
- 精神疾病抑郁症治疗方案
- 2026广东清远市英德市人民武装部招聘专项临聘人员1人备考题库附参考答案详解(培优b卷)
- 2026广东珠海市拱北海关缉私局警务辅助人员招聘6人备考题库带答案详解(考试直接用)
- 艺术课程标准(2022年版)
- 妇幼健康服务工作评分细则
- JJG 968-2002烟气分析仪
- GB/T 2522-2017电工钢带(片)涂层绝缘电阻和附着性测试方法
- GB/T 193-2003普通螺纹直径与螺距系列
- GB/T 1149.3-2010内燃机活塞环第3部分:材料规范
- 七年级语文部编版下册第单元写作抓住细节课件
- 高校教师培训高等教育法规概论课件
- 基坑钢板桩支护计算书计算模板
- 焦聚优点-发现不一样的自己 课件-心理健康
- 【精品】东南大学逸夫建筑馆施工组织设计
评论
0/150
提交评论