70,019
社区成员




#include <stdio.h>
#include <math.h>
bool sushu(int m)//判断是否是素数
{
int i;
for(i = 2; i <= sqrt(m) ; i ++)
{
if(m % i == 0)
break;
else
continue;
}
if(i > sqrt(m))
return true;
else
return false;
}
int j;//加,把j移出递归以避免重复写b数组
void quan(int a[], int b[], int m/*删, int j*/)//围圈
{
int i;
for(i = 1; i < m; i ++)
{
if(a[i] != b[j] && sushu(b[j] + a[i]) && a[i] != 0)
{
b[++ j] = a[i];//如果满足条件就将a[i]加到数组b中。
a[i] = 0; //同时将a[i]变成0
quan(a, b, m/*删, j*/);//继续
}
}
}
int main()
{
int a[20], b[20], i/*删, j*/;
int k;//加
for (k = 0; k < 20; k++)//加
{
//printf("*******初始化数组**********\n");
for(i = 0; i < 20; i ++)//
a[i] = 20 - i;//改 a[i] = i + 1;
j = 0;
b[j] = a[k];//改 b[j] = a[0];//将b[0]初始化为a[0]
a[k] = 0;//改 a[0] = 0;
//删printf("b[%d] = %d\n",j,b[j]);
quan(a, b, 20/*删, j*/);
//删printf("\n");
if (j == 19)//加
{
printf("围成的圈是: ");
for(i = 0; i <= j; i ++)//改 for(i = 0; i < 20; i ++)
printf("%d ",b[i]);
printf("\n");
}
}
return 0;
}