算发设计与分析实验报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算发设计与分析实验报告.doc

算法设计与分析实验报+ 系別:信息技术系 班级:计科***班 学号: 姓名:** 实验三 贪心算法的应用 一、实验目的 掌握贪心算法的基本概念和两个基本要素 熟练掌握贪心算法解决问题的基本步骤。 学会利用贪心算法解决实际问题。 二、实验内容 1 ?问题描述: 题目一:找钱问题 一个顾客买了价值x元的商品(不考虑角、分),并将y元的钱交给售货员。 售货员希望用张数最少的钱币找给顾客。 要求:键盘输入x与y 输出找钱总数,各种钱币的张数,若张数为0不必输出。 输入输出实例: 题目二:删数问题 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原 左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下 的数字组成的新数最小。 输出应包括所去掉的数字的位置和组成的新的正整数(N不超过100位)o 要求:键盘输入正整数N与删除位数s 输出删除后的最小新数以及删除的位数 输入输出实例: 题目三:分数表示问题 设计一个算法,把一个真分数表示为最少埃及分数Z和的形式。所谓埃及分 数是指分子为1的分数。如7/8二1/2+1/3+1/24。 2?数据输入:个人设定,由键盘输入。 3 ?要求: 1)上述题目学号为单号的做题目一和三,双号做题目二。上机前, 完成程序代码的编写 2)独立完成实验及实验报告 三、算法设计 题目二:删数问题 经分析,算法主要由四部分组成:初始化、相邻数字比较(必要吋删除)、处 理比较过程中删除不够s位的情况和结果输岀。 算法设计1: 一种简单的控制相邻数字比较的方法是每次从头开始,最多删除S次,也就 从头比较S次。按题目要求设置数组data记录删除的数字所在位置。 delete(char n[],int b,int k) {int i; for(i=b;i= length(n卜 k;i=i+l) n[i]=n[i+k]; } main () {char n[100]; int s,i,j,jl,c,data[100]Jen; in put(n); input(s); len二length(n); if(slen) {print(data error); return;} jl=0; for (i=l;i=s ;i=i+l)// i控制删除字符的个数 {for (j=O;jlength(n);j=j+l) //j控制相邻比较操作的下标 if(n[j]n[j+l])// 贪婪选择 {delete(n,j,l); if (jjl) data[i]=j+i;//记录删除数字位置 else data[i]=data[i-l]-l; //实例2向前删除的情况 jl=j; break; } if( jlength(n)) break;} for (i=i;i=s;i=i+l) {j=len-i+l;delete(n,j,l); data[i]=j;} while (n[0]=0 and length(n) 1) delete(n,0,l); 〃将字符串首的若干个“0”去掉 print(n); for (i=l;i=s;i=i+l) print(data[i]/ ); } 算法设计2: 删除字符的方式同算法1,只是删除字符后不再从头开始比较,而是向前退 一位进行比较,这样设计的算法2的效率较算法1要高一些。deleteO?数同前。 变量i控制删除字符的个数,变量j控制相邻比较操作的下标,当删除了第 j个字符后,j赋值为j?l,以保证出现的特殊情况得到正确处理。 main(){ char n [100]; int s,ij,jl,data[100],len; input(n); input(s); len 二 length(n); if(slen){ print(data error); return; } i=0; j=l; jl=0; while(is and j=length(n)?l){ while(n[j]=n[j+l]) j=j+l; if (jlength(n)){ delete(nj,l); if (jjl) data[i]=j+i; else data[i]=data[i-l]-l; i=i+l; jl=j;j=j-l; } } delete(char n,int b,int k){ int i; for(i=b;i= len gth (n)?k;i 二 i+1) n[i]=n[i+k]; } for (i=i;i=s;i=i+l){ j=le n?i+l; delete(nj,l); data[i ]=j; } while (n[l]二‘0’ and length(n) 1) delete(n,l,l); print(n); for (i=l;i=s;i=i+l) print(data[i]

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档