欢迎来到天天文库
浏览记录
ID:5780655
大小:140.50 KB
页数:18页
时间:2017-12-24
《用c语言解决猴子吃桃子问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、贾勤《用C语言解决猴子吃桃子问题》第18页共18页用C语言解决猴子吃桃子问题学生姓名:贾勤指导老师:湛新霞摘要本课程设计主要解决猴子吃桃子的问题。一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。在课程设计中,系统开发平台为Windows2000,程序设计设计语言采用VisualC++,数据库采用MSSQL2000,程序运行平台为Windows98/2000/XP。在整个程序中分别采用数组数据结构、链数据结构、递归等结构形式实现此问题
2、的求解。程序通过调试运行,初步实现了设计目标。关键词程序设计;C++;数组;链;递归;猴子吃桃1引言在日常生活中经常遇到一些与数据计算有关的问题,许多与猴子吃桃问题类似的问题要求用计算机程序语言来解决,用这个程序算法可以解决一些类似问题,以便利于生活实际。1.1课程设计背景猴子吃桃问题涉及一个比较有趣的数组,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2。a[i]实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为a[i]=3*pow(
3、2,(i-1))-2(i>=2)贾勤《用C语言解决猴子吃桃子问题》第18页共18页1.2课程设计目的在这个程序中我们主要是用C语言解决猴子吃桃问题,一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。生活中或学术上有很多类似的问题,这个问题看似简单,却可能使很多重大问题的重要组成部分或者是核心。解决此问题的目的是以便在生活中解决根本性问题,是生活变得更加便利。1.3课程设计内容这个程序的内容是以C语言为程序语言载体分别用数组数据结构、链
4、数据结构、递归等结构形式实现此问题的求解。贾勤《用C语言解决猴子吃桃子问题》第18页共18页需求分析这个课程设计分为三个部分,即分别用三种不同的方法解决猴子吃桃子问题。每个部分都有不同的算法思想。用数组结构实现的算法,通过构造求桃子数的数组,然后输出要求的项来实现。用链结构实现的算法,则是建立链表,将每天的桃子数目存入链表,然后输出第一天的桃子数。用递归结构实现的算法,是通过函数本身的特点,反复调用自身,最后找到递归的出口,求得算法的解。贾勤《用C语言解决猴子吃桃子问题》第18页共18页3概要设计2.1设计思路C是结构式语
5、言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。2.2设计方案如果用数组结构解决这个问题,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2。a[i]实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为a[i]=3*2e(i-1)
6、-2(i>=2)。如果用链结构解决这个问题,建立一个链表,根据每天桃子数与后一天桃子数的关系n=2*n+2,依次将每天的桃子数存进链表中,最后输出第一天的桃子数。如果用递归结构解决这个问题,要求利用他们每天都吃当前桃子的一半且再多吃一个这一特点,设计一个递归算法。贾勤《用C语言解决猴子吃桃子问题》第18页共18页4详细设计3.1数组结构把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数a[i]的递推公式为a[i]=(a[i-1]+1)*2。a[i]实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项
7、公式为a[i]=3*pow(2,(i-1))-2(i>=2)。数组结构算法的流程图如图3-1:开始建立一个以天数为下标以剩下桃子数为元素的数组规定此数组的通向公式求第一天的桃子数结束图3-1intday,tao[11];//定义数组和下标tao[0]=0;//tao[0]赋值为0tao[1]=1;//倒数第一天的桃子数为1for(day=2;day<=10;day++)tao[day]=3*pow(2,day-1)-2;//给数组的赋值printf("最初的桃子数为%d",tao[10]);//输出最初的桃子数贾勤《用
8、C语言解决猴子吃桃子问题》第18页共18页3.2链结构用链结构实现这个算法,其核心是利用链表这种存储结构,将每天的桃子数存储在链表中,在链表中实现数的递推。首先是建立一个空链表,产生一个头结点,且将头结点的地址赋给L。然后把每天的桃子数从链表的第一个结点插入链表。最后第一天的桃子数被最后一个插入链表,成
此文档下载收益归作者所有