- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算法课设呵呵
2015届课程设计
班级:民本班专业:机科学与技术学号:姓名
一、课程设计实验题目
素数和环,把前n个正整数摆成一个环,如果环中所有相邻的两个数之和都是一个素数,该环就称为一个n项素数和环。对于指定的n构造并输出所有不同的素数。
二、课程设计实验目的
1、掌握解决素数和环问题的设计算法。
2、初步了解掌握回溯算法的综合应用。
3、掌握回溯算法设计的思想、调试的方法和技巧。
4、设计回溯算法完成问题求解。
5、考察回溯法的求解问题的有效程度。
6、增强基本素数和环序列问题程序设计的能力。
7、加深简单算法设计和分析能力。
三、课程设计实验的意义
虽然“计算机算法与程序设计”这门课很难,很枯燥,但在做课程设计的过程中要经过一次又一次的思考,一遍又一遍的检查找出原因所在,并解决问题。
在解决实际问题或实现某些算法时,回溯算法是经常使用的解决环序列问题,掌握回溯算法的定义,元素引用特征和回溯算法的编程特色,可加强学生解决实际问题的能力。在数组的使用中,字符数组及相关字符串操作是经常使用的操作。增强字符数组的编程练习,提高相关程序设计经验对于提高学生的程序设计和调试的能力具有很重要的作用。
做实验时,一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,实验后,还要复习,思考。加强动手能力,并且培养独立思考能力。特别是在做实验报告时,因为在做数据处理时出现很多问题,如果不解决的话,将会很难的继续下去。例如:编程序时,会遇到运行结果错误或不能运行,这就要求懂得怎么去编程序和如何使用VisualC++软件一些基本操作;还有画图时,也要用软件画图,这也要求懂得excel软件的插入图表命令等。
四、课程设计实验的具体程序
回溯实现n项素数环
#includestdio.h
#includemath.h
void main()
{ int t,i,j,n,k,s,a[2000],b[1000];
printf(前n个正整数组成素数和环,请输入整数n:);
scanf(%d,n);
for(k=1;k=2*n;k++)b[k]=0;
for(k=3;k=2*n;k+=2)
{ for(t=0,j=3;j=sqrt(k);j+=2)
if(k%j==0)
{t=1;break;}
if(t==0) b[k]=1; //奇数k为素数的标记
}
printf(前%d个正整数组成素数和环,其中5个为:\n,n);
a[1]=1;s=0;
i=2;a[i]=2;
while(1)
{ t=1;
for(j=1;ji;j++)
if(a[j]==a[i]||b[a[i]+a[i-1]]!=1) //出现相同元素或非素时返回
{t=0;break;}
if(ti==nb[a[n]+1]==1)
{ s++;
printf(%d:1,s);
for(j=2;j=n;j++)
printf(,%d,a[j]);
printf(\n);
if(s==5)return;
}
if(tin)
{i++;a[i]=2;continue;}
while(a[i]==ni1)i--; //实施回溯
if(i1) a[i]++;
else break;
}
}
五、课程设计实验中的程序分析
用回溯算法,考察所有可能的排列。
设置a数组在前n个正整数中取值。为避免重复输出,约定第一个数a[1]=1。
设置b数组标记奇素数。对指定的正整数n,首先用试商判别法,把2n范围内的奇素数标记为“1”,例如,b[7]=1表明7为素数。
在永真循环中,i从2开始至n递增,a[i]从2开始至n递增取值。
(1)元素a[i]的取值是否可行,赋值t=1;然后进行判断:
●若a[j] == a[i](j=1,2,…,i-1),即a[i]与前面的a[j]相同,a[i]取值不行,标注t=0;
●若b[a[i]+a[i-1]]!=1即所取a[i]与其前一项之和不是素数,标注t=0。 (2)若判断后保持t=1;说明a[i]取值可行。
此时若i已取到n,且b[a[n]+1]=1(即首尾项之和也是素数),输出一个解。
若in,则i++;a[i]=2;即继续,下一个元素从2开始取值。
(3)若a[i]已取到n,再不可能往后取值,则i--;即行回溯。
回溯至前一个元素,a[i]++继续增值。
最后回溯至i=1,完成所有探索,跳出循环结束。
考虑到当n较大时,n项素数和环非常多,约定只输出5个解后提前结束。
六、课程设计实验结果分析
前n个正整
文档评论(0)