题目描述
把从1到n的正整数排成一个环,使环中任何相邻的两个数之和都为素数,从1开始在一行输出一个符合条件的数环,按字典序输出所有符合条件的数环。n不大于9。
输入
一行输入一个正整数n,遇到文件末尾结束。
输出
从1开始在每行输出一个符合条件的数环,按字典序输出所有符合条件的数环,数和数之间不加空格。
样例输入
4
样例输出
1234
1432
参考代码
#include<stdio.h>
#include<math.h>
int su(int m);//判断素数
void huan(int t);//回溯
int n;//(全局变量)
int a[100]={0};//存数
int b[100]={0};//记录数是否被使用
int main()
{
scanf("%d",&n);
a[0]=1;
b[0]=1;
huan(1);//求初值为1的环,故直接给函数复制为1
return 0;
}
void huan(int t) {
int i;
if(t==n&&su(a[n-1]+a[0]))//输出环的条件
{
for(i=0;i<n;i++)
{
printf("%d",a[i]);
}
printf("\n");
}
else{
for(i=2;i<=n;i++)
{
if(b[i-1]==0)//此数没有被使用过
{
a[t]=i;
b[i-1]=1;
if(su(a[t]+a[t-1]))
{
huan(t+1);//开始递归
}
b[i-1]=0;//还原初始状态
}
}
}
}
int su(int m)
{
int i;
if(m<3) return 0;
else{
for(i=2;i<=sqrt(m);i++){
if(m%i==0){
return 0;
break;
}
}
}
return 1;
}