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

合肥学院 计算机科学与技术系 课程设计报告 2011 ~2012 学年第 二 学期 课程 数据结构与算法 课程设计名称 幸运数组 学生姓名 付旭日 学号 1004011044 专业班级 10计本(1)班 指导教师 李红 陈艳平 2012 年 6 月 1、题目:幸运数组 doraemon有一个幸运数字K, 并且对于一个数组, 若其和能被K整除, 则称该数组为幸运数组。现在他想知道, 给定一个长度为n且由正整数构成的数组, 它有多少个子数组为幸运数组呢? 其中, 子数组的定义为a[i:j](即a[i] ,a[i + 1], …… ,a[j], 其中1 = i = j = n)。 要求: (1)输入:输入的第一行有2个整数n和K(1 = n = 50,000, 1 = K = 1,000,000,000),分别代表数组的长度和幸运数字,接下来的一行有n个正整数ai(1 = i = n, 1 = ai = 1,000,000,000), 代表数组的元素。 (2)输出:?输出的一个数字, 代表存在的幸运子数组的个数。 (3)所设计的数据结构应尽可能节省存储空间。 (4)程序的运行时间应尽可能少。 2、问题分析: 本题要求在一个给定的数组中,相邻元素之和或者单独的数据元素可以被幸运关键字K整除的组成个数。例如:一个数组中有6个元素1,2,3,4,5,6.则定义幸运数字是4,在这个数组中就有[2,3,4,5,6]=20,[3,4,5,]=12,[4]=4,三个子数组满足幸运数字的整数倍,所以输出3即可。在这里数组元素的存储可以用顺序表线性存储,存储空间根据数组元素的长度来决定,数组的长度可以自己定义,从题目可以看出是一维数组,输入的数据元素是整型数据。 在本问题的分析上还要考虑到范围问题,因为限定n和K的范围是 1 = n = 50,000, 1 = K = 1,000,000,000所以可以看出数组元素的上限很大,对于很大的元素数据是不可能通过列举的方法来验证计算的正确与否所以这里给出一定长度的元素数据,这样就可以通过可以简单计算的长度数组,以此来验证程序运行的正确性。 测试数据:(1)长度:6,幸运数字:3,数组:1,2,3,4,5,6,通过计算可得幸运数组个数为11个 (2)长度:6,幸运数字:4,数组:1,2,3,4,5,6,通过计算可得幸运数组个数为3个 3、数据结构的选择和概要设计: 首先确定储存结构为顺序表结构,需要建立一个顺序表。在顺序表中输入数据元素储存,在输入数组长度的时候需要进行判定是否n的范围在(0~5000]之间如果满足这个范围,则进行数据元素的输入,否则会提示错输入误。在给出幸运数字数和对组元素进行存储之后要进行的就是在这个数组中找到符合题意的子数组: 1、建立顺序表,给出顺序表长度,并且设定幸运数字。 2、首先对顺序表首元素判断如果满足题意,设定一个计数器ch(初始状态为0)进行满足子组数的计数,这时设定一个和加量add(初始状态为0)作为下一次判断是否满足的量每一次判断之后add=add+L-data[i],即每一次都要将下一个元素累加进去进行判断。如果不满足则计数器不计数,而add的累积继续进行直到累加到最后一个数为止。 3、然后返回到顺序表的第二元素,add置0,ch不变,再重复步骤1的操作,直到顺序表返回到表尾元素停止判断,同时返回ch的值即为幸运子数组的个数。 4、对幸运数组个数进行输出。 图1、主函数流程图 5、在主函数流程图中的重要步骤是查询函数,记录满足幸运数字条件的数组的个数,所以查询函数才是重点需要设计的函数,当然首先要对顺序表的建立与数组元素的存储。 图2、查询函数流程图 4、算法思想: 本题的算法思想是通过两个for循环语句来实现对数组元素和的累加来判断累加和是否满足可以整除幸运数组,一旦满足则通过累加语句加一,如果不满足则继续下一个累加和的判断。在for循环的结束判断标志上是通过顺序表的长度控制,在程序中因为有一个for循环的嵌套,所以程序的时间性能是n^2而空间性能是取决于顺序表的长度所有就是n。具体算法如下: 先对数组的第一个元素a1的值赋给add进行判断是否可以整除幸运数字K,如果整除ch计数加1,否则不加;然后i++(第二步时i=1),add=add+data[i],即加上后一个元素的和在判断是否可以整除幸运数字K的值,满足加1,不满足不加;持续操作循环过程直到加到顺序表的最后一个元素之后,返回到第二个元素a2作为本次累加的第一个元素,此时add置为0,而计数器ch不动,重新作出累加判断,在累加到最后一个元素是返回第

文档评论(0)

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

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

1亿VIP精品文档

相关文档