70,011
社区成员




//把从1—20这20个数摆成一个环,要求相邻的两个数的和是一个素数
#include <stdio.h>
#include <math.h>
int data[21];
void Init();
void Search(int num);
int IsPrime(int num);
void PrintResult();
void Swap(int &a,int &b);
int main()
{
Init();
Search(2);
return 0;
}
void Init()
{
int i;
for(i=1;i<=20;++i)
data[i]=i;
}
void Search(int num) //在这个函数里出现死循环
{
int i;
if(num>=20)
PrintResult();
else
{
for(i=num;i<=20;++i)
{
Swap(data[num],data[i]); //向前
if(IsPrime(data[num-1]+data[num]))
Search(num+1);
Swap(data[i],data[num]); //恢复
}
}
}
int IsPrime(int num)
{
int i, n=(int)sqrt(num);
for(i=2;i<=n;++i)
if(num%i==0)
return 0;
return 1;
}
void PrintResult()
{
int i;
for(i=1;i<=20;++i)
{
printf("%4d",data[i]);
if(i%10==0)
printf("\n");
}
}
void Swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}