您现在的位置:首页 > 教案格式 > 正文

素数环_数据结构素数环_1到20的素数环

2016-12-02 21:03 网络整理 教案网

没看出什么大问题。

1.你的check3(inti)的时候:


if(i <20)
return(check2(a[i]+a[i-1])); 

i=1的情况你没考虑,i=1应该直接返回1。

2.没必要检测当前摆放的数字与前面的数字有无重复,不可能重复的。

3.判断素数如果换成8楼的列表就快多了。

4.如果8楼的程序的解是6309300个的话,你解的个数应该是6309300*20,譬如1,2,3,4四个数,你还会把2,3,4,1

3,4,1,2

4,1,2,3

打印出来。不过8楼的程序为什么没有循环打印我也没看出来。素数环素数环

//primeCircle_cTree.cpp:定义控制台应用程序的入口点。

//

#include"stdafx.h"

#include<stdio.h>

#include<math.h>

inta[21];

intcheck1(inti)//检测当前摆放的数字与前面的数字有无重复

{

intk;

for(k=1;k<=i-1;k++)

if(a[k]==a[i])

return0;

return1;

}

intcheck2(intx)//检测x是否为素数

{

intk,n;

n=sqrt(double(x));

for(k=2;k<=n;k++)

if(x%k==0)

return0;

return1;

}

intcheck3(inti)//检测与前面相邻的数据的和是否是素数

{

if(i<20)

return(check2(a[i]+a[i-1]));

else

return(check2(a[i]+a[i-1])&&check2(a[i]+a[1]));//特别要注意第20个数还要和第一个数判断是否是素数

}

voidoutput()

{

intj;

for(j=1;j<=20;j++)

printf("%d,",a[j]);

return;

}

voidswap(intt1,intt2)//数据交换排列树的精华吧

{

intt;

t=a[t1];

a[t1]=a[t2];

a[t2]=t;

return;

}

voidtry(intt)

{

intj;

if(t>20)

output();

else

{

for(j=t;j<=20;j++)

{

swap(t,j);

if(check1(t)==1&&check3(t)==1)

{

try(t+1);

}

swap(t,j);

}

}

return;

}

voidmain()

{

intk;

for(k=1;k<=20;k++)//定义素数环初始排列顺序,1,2,3...20

a[k]=k;

try(1);

return;

}