欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    找零问题贪心算法实现.docx

    • 资源ID:3539309       资源大小:38.03KB        全文页数:5页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    找零问题贪心算法实现.docx

    找零问题贪心算法实现找零问题贪心算法实现 一、 实验描述 当前有面值分别为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_H class LeastCoins public: ; #endif #include <iostream.h> #include <fstream.h> #include <cstdlib> #include <iomanip.h> #define N 10 ifstream inputFile("input.txt",ios:out); ofstream outputFile("output.txt",ios:out); LeastCoins; LeastCoins; void run; 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; / 寻找 轨迹 private: LeastCoins:LeastCoins LeastCoins:LeastCoins void LeastCoins:run int LeastCoins:changeMoney(int i,int j) if (i>1) if (j<Ti) / 要找的钱数 小于 该硬币的面值 mi-1j=changeMoney(i-1,j);mij=mi-1j; else return mij; if (input) changeMoney(number,TotalMoney); output; inputFile>>number; outputFile<<"有 "<<number<<" 不同的硬币."<<endl; outputFile<<setw(4)<<"面值"<<setw(7)<<"个数"<<endl; int sum=0; for (int i=1;i<=number;i+) inputFile>>TotalMoney; outputFile<<"需要找回的总钱数为: "<<TotalMoney<<endl; if (T!=NULL && Coins!=NULL) return false; if (sum>=TotalMoney)return true; else outputFile<<"所有硬币的总钱数是 "<<sum<<" 小于需要找回的总钱数 return false; inputFile>>Ti; inputFile>>Coinsi; outputFile<<setw(3)<<Ti<<setw(3)<<" "<<setw(3)<<Coinsi<<endl; sum+=Ti*Coinsi; bool LeastCoins:input delete T; delete Coins; for (int i=0;i<N;i+) delete mi; delete m; 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; "<<TotalMoney<<endl; int 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=1 else return 1000000; if (j%T1)=0 && (j/T1<=Coins1) else return 1000000; m1j=j/T1; return m1j; void LeastCoins:output void LeastCoins:traceback int main LeastCoins LC; LC.run; return 0; int j=TotalMoney; for (int i=number;i>=2;i-) outputFile<<setw(3)<<Ti<<setw(3)<<" "<<setw(3)<<(j/T1)<<endl; 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+X-1; if (T1<T2) outputFile<<setw(3)<<Ti<<setw(3)<<" "<<setw(3)<<X<<endl; j-=X*Ti; else outputFile<<setw(3)<<Ti<<setw(3)<<" "<<setw(3)<<(X-1)<<endl;if (mnumberTotalMoney<1000000) / 判断是否 有解 else outputFile<<"无解"<<endl; outputFile<<"需要最少的硬币个数是: "<<mnumberTotalMoney<<endl; outputFile<<setw(4)<<"面值"<<setw(7)<<"个数"<<endl;traceback; j-=(X-1)*Ti; 四、 运行结果 图1 运行结果 五、 实验总结 对贪心算法不是特别熟悉,以至于在编写程序时遇到好多错误,好在差不多都改正了,此程序尚有不足之处,希望在以后的深入学习后能编写个更好的程序。

    注意事项

    本文(找零问题贪心算法实现.docx)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开