#include"stdio.h"
#include"math.h"
#define MAX 100
int a[MAX];
int flag[MAX];
int pos[MAX];
int form[9]={0};
void sort(int n)
{
int i,j,t,min;
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
if(a[j]<a[min])
min=j;
if(min!=i)
{
t=a[i];
a[i]=a[min];
a[min]=t;
}
}
}
int prime(int num)
{
int i;
for(i=2;i<=sqrt(num);i++)
if(num%i==0)
break;
if(i>sqrt(num))
return 1;
return 0;
}
int search(int first,int last,int now)
{
int check,i;
for(i=first;i<last;i++)
{
if(!flag[i])
{
form[now]=a[i];
check=1;
if(now>2)
check=prime(form[now]+form[now-3]);
if((now!=0) && (now%3!=0))
check&=prime(form[now]+form[now-1]);
if(check)
{
pos[now]=i;
flag[i]=1;
return 1;
}
}
}
return 0;
}
void fillform(int n)
{
int i,j,k=0,status=0,end=0,check=0;
form[0]=a[0];
for(i=0;i<n;i++)
{
flag[i]=0;
pos[i]=0;
}
i=0;
flag[0]=1;
while(!end)
{
if(form[0]==a[n-1])
status=1;
if(i==8)
{
printf("第%3d组:\n",++k);
for(j=0;j<9;j++)
{
printf("%3d",form[j]);
if((j+1)%3==0)
printf("\n");
}
}
i++;
check=search(0,n,i);
while(!check)
{
pos[i]=0;
i--;
if(i<0)
{
if(status)
end=1;
break;
}
flag[pos[i]]=0;
check=search(pos[i]+1,n,i);
}
}
}
void main()
{
int i,n;
printf("请输入你要输入的数组的个数:\n");
scanf("%d",&n);
printf("请分别输入这些值:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(n);
fillform(n);
}
评论0