找零问题贪心算法实现.doc_第1页
找零问题贪心算法实现.doc_第2页
找零问题贪心算法实现.doc_第3页
找零问题贪心算法实现.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

找零问题贪心算法实现一、 实验描述当前有面值分别为2角5分,1角,5分,1分的硬币,请给出找n分钱的最佳方案(要求找出的硬币数目最少)。二、 实验原理具体实例:假如老板要找给我99分钱,他有上面的面值分别为25,10,5,1的硬币数,为了找给我最少的硬币数,那么他是不是该这样找呢,先看看该找多少个25分的, 99253,好像是3个,要是4个的话,我们还得再给老板一个1分的,我不干,那么老板只能给我3个25分的拉,由于还少给我24,所以还得给我2个10分的和4个1分。具体实现:/找零钱算法/By falcon/输入:数组m,依次存放从大到小排列的面值数,n为需要找的钱数,单位全部为分/输出:数组num,对照数组m中的面值存放不同面值的硬币的个数,就找钱方案参考实验代码部分。三、 实验代码#ifndef LEASTCOINS_H#define LEASTCOINS_Hclass LeastCoinspublic:LeastCoins();LeastCoins();void run();private:int number; / 不同面值的硬币个数int TotalMoney; / 要找回的总钱数int *T; / 存储硬币的面值int *Coins; / 硬币的个数int *m; / mij 是以 最大面值 i 要找回 钱数是 j 需要硬币数的 最少个数bool input();int changeMoney(int i,int j); / i 是 第 i 中硬币void output();void traceback(); / 寻找 轨迹;#endif#include #include #include #include #define N 10 ifstream inputFile(input.txt,ios: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;iN;i+)mi=new int N*N;LeastCoins:LeastCoins()delete T;delete Coins;for (int i=0;inumber;outputFile有 number 不同的硬币.endl;outputFilesetw(4)面值setw(7)个数endl;int sum=0;for (int i=1;iTi;inputFileCoinsi;outputFilesetw(3)Tisetw(3) setw(3)CoinsiTotalMoney;outputFile需要找回的总钱数为: TotalMoney=TotalMoney)return true;elseoutputFile所有硬币的总钱数是 sum 小于需要找回的总钱数 TotalMoney1) if (jTi) / 要找的钱数 小于 该硬币的面值mi-1j=changeMoney(i-1,j);mij=mi-1j;return mij;elseint X=j/Ti; X=(X(T2+X-1)mij=T2+X-1; else mij=T1+X;return mij;else if(i=1)/ 此时 i=1if (j%T1)=0 & (j/T1=Coins1)m1j=j/T1;return m1j;else return 1000000; else return 1000000;void LeastCoins:output()if (mnumberTotalMoney1000000) / 判断是否 有解outputFile需要最少的硬币个数是: mnumberTotalMoneyendl;outputFilesetw(4)面值setw(7)个数endl;traceback();else outputFile无解=2;i-)int X=j/Ti; / 最多需要面值为 Ti 的硬币的个数X=(XCoinsi ? X : Coinsi) ; / 取 X 和 Coinsi的较小值 int T1=mi-1j-X*Ti+X;int T2=mi-1j-(X-1)*Ti+X-1;if (T1T2)outputFilesetw(3)Tisetw(3) setw(3)Xendl;j-=X*Ti;elseoutputFilesetw(3)Tisetw(3) setw(3)(X-1)endl;j-=(X-1)*Ti;outputFilesetw(3)Tisetw(3) setw(3)(j/T1)endl;int main()LeastCoins LC;LC.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论