此题链接单击这里
=================
用回溯法解此题
#include <iostream>
#include <cstdio>
using namespace std;
int a[20];
int n;
bool is1(int k)
{
for (int i = 2; i < k; i++)
if (k%i == 0)
return false;
return true;
}
bool is2(int i,int b)
{
for(int j=2;j<b;j++)
if(a[j]==i)
return false;
return true;
}
void funt(int b)
{
int lase=0;
if(b==n+1&&is1(a[n]+a[1]))
{
for(int i=1;i<=n;i++)
if(lase==0)
{
cout<<a[i];
lase=1;
}
else
cout<<' '<<a[i];
cout<<endl;
}
for(int i=2;i<=n;i++)
if(is1(a[b-1]+i)&&is2(i,b))
{
a[b]=i;
funt(b+1);
}
}
int main()
{
int l=0,loge=0;
while (cin >> n)
{
if(loge)
cout<<endl;
loge=1;
printf("Case %d:\n",++l);
if(n==1)
continue;
a[1]=1;
funt(2);
}
}
有问题联系企鹅791267032
邮箱地址….wutanrong@Hotmail.com