猴子吃桃问题-数据结构与算法课程设计报告.docVIP

猴子吃桃问题-数据结构与算法课程设计报告.doc

  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文档。上传文档
查看更多
猴子吃桃问题-数据结构与算法课程设计报告

合肥学院 计算机科学与技术系 课程设计报告 2009~2010学年第二学期 课程 数据结构与算法 课程设计名称 猴子吃桃问题 学生姓名 王 康 可 学号 0804012014 专业班级 计算机科学与技术08级(2)班 指导教师 王昆仑 张贯虹 2010 年 6月 题目:(猴子吃桃问题)有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。 a9= 2 * ( a1 0+ 1 ) a8= 2 * ( a9+ 1 ) ┇ a1= 2 * ( a2+ 1 ) a0= 2 * ( a1+ 1 ) 也就是:ai= 2 * ( ai + 1), 其中i=10,9,8,7,6,...,1,0 。 这就是此题的数学模型。 通过阅读题目、分析题意,要求利用不同方法实现这群猴子摘桃子总数,为了实现题目要求,可采用递归、链式、数组等方法,而不管是采用哪种方法、哪种数据结构,其基本语句都是ai= 2 * ( ai + 1+1),其中i=10,9,8,7,6,...,1,0。 数据结构的选择和概要设计 按照题目要求,采用数组数据结构、链式数据结构。 分别利用递归算法、链式存储、数组来实现函数功能。将所有模块放在一起,利用主函数中的菜单来调用不同子函数以实现题目要求。 三、详细设计和编码 1、采用递归算法 子函数中,关键语句为N=2*recursion(N+1)+2,采用判断语句 if…else…,“if(N==10) return 1;”,给出第十天吃过桃子后剩下桃子数为1,其他天数return N=2*recursion(N+1)+2,即通过递归调用计算,通过已知的后一天剩下的桃子总数来求出前一天剩下的桃子总数。 在主函数中,利用for循环,来调用递归函数,即N=recursion(i)。具体实现为:for(i=0;i=10;i++){ N=recursion(i); printf(第 %d 天,还剩桃子 %d 个\n,i,N); } 可知N=2*recursion(N+1)+2语句要调用10+9+……+1共55次,桃子原来的总数为: recursion(0)。 2、采用数组数据结构 构建子函数void Array(int a[]),初始化i=10,从10开始计算,i--,通过语句while(i0),来循环运行a[i-1]=2*a[i]+2,以求出每天剩下的桃子数当i=0时退出循环。 在主函数中定义数组int a[11]来存储每天剩下的桃子总数,初始化a[10] =1,通过调用子函数Array(a),并利用for循环来输出每天剩下的桃子总数,其中a[0]即为原来猴群所摘的桃子的总数。 3、采用链式数据结构 构建创建链表子函数LinkList *CreatList(),定义两个结点*L、*p,L-next=NULL,数据域为L-data=1,即第十天剩下的桃子数目为1个。p结点存储前一天的桃子数,一个一个往前插,即p-data=2*L-data+2,p-next=L,L=p。 构建子函数void DisplayList(LinkList *L),int i=0,定义LinkList *p,p=L。通过循环语句while(p!=NULL),i++,输出p-data域,然后p=p-next,来输出每天剩余桃子总数。 在主函数中调用链表创建函数L=CreatList()以及输出函数DisplayList(L),原来猴群所摘的桃子的总数为L-data。 四、上机调试 由于此程序是分模块进行,且每一个模块相对比较简单,所以在做程序的过程中比较顺利。刚开始时,每一个算法我都是单独的一个程序来实现,基本上没有出现问题,在将所有方法、程序做好后,再将所有程序集合在一起,利用主函数的菜单来分块调用以实现题目要求。在整合过程中,出现了一些编辑错误,但是都是比较小的错误,很快就找出来了,应该说整个程序做的过程还是比较顺利的。 在做程序的过程中,对题目的理解有问题,造成结果的不确定。到第十天剩下1个桃子,是指吃完才剩下,还是没吃就剩下,不同的理解所求结果就不同。如果是吃剩下再剩下所求结果就为3070个,如果是第十天吃之前剩下桃子数为1个,那么求得的桃子总数为1534个。最后将第十天剩下1个理解为吃过之后剩下的桃子数,因为如果不是第十天吃过之后,那么到第九天吃过之后就只剩下1个桃子了,与题意中的第十天剩下1个不符。 五、测试结果及其分析 1、采用递归算法解决问题: 2、采用数组数据结构算法解决问题: 3、采用链式数据结构算法解决问题: 4、退出功能: 5、提示菜单输入错误 六、用户使用说明

文档评论(0)

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

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

1亿VIP精品文档

相关文档