<我们只活在当下,过去只属于记忆,未来遥不可及! ------ 生而为人,我很抱歉
Youio

输入正整数n,把整数1,2,...,n组成一个环,使得相邻两个整数之和均为素数。输出时,从整数1开始逆时针排列。同一个环恰好输出一次。n<=16.

多组数据,读入到EOF结束。

第i组数据输出前加上一行Case i:

相邻两组数据中间加上一个空行。

输入输出样例

输入 #1
6
8
输出 #1
Case 1:
1 4 3 2 5 6
1 6 5 2 3 4

Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
代码:

#include<bits/stdc++.h>
using namespace std;
bool b[100]={0};
int total=0,a[100]={0};
int ser(int);
int out();
bool js(int,int);
int n;
int main()
{
a[1]=1;
while(scanf("%d",&n)!=EOF)
{
ser(2);
memset(b,0,sizeof(b));
total=0;
memset(a,0,sizeof(a));
a[1]=1;
}
}
int ser(int t)
{
int i;
for(i=2;i<=n;i++)
if(js(a[t-1],i)&&(!b[i]))
{
a[t]=i;
b[i]=1;
if(t==n)
{
if(js(a[n],a[1])) out();
}
else ser(t+1);
b[i]=0;
}
}
int out()
{
total++;
cout<<"Case"<<" "<<total<<":"<<endl;
cout<<"1"<<" ";
for(int j=2;j<=n;j++)
cout<<a[j]<<" ";
cout<<endl;
}
bool js(int x,int y)
{
int k=2;
int i=x+y;
for(int j=2;j<=sqrt(i);j++)
if(i%j==0) return 0;
return 1;
}

posted on 2019-08-10 13:51  Youio  阅读(191)  评论(0编辑  收藏  举报