求调
  • 板块灌水区
  • 楼主Xin_Ting
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/10 12:31
  • 上次更新2024/8/10 14:15:51
查看原帖
求调
1332851
Xin_Ting楼主2024/8/10 12:31
/*题目描述
将1~n这n个数字首尾相连,形成一个圆环,要求圆环上任意两个相邻的数字之和都是一个素数,请编程输出符合条件的素数环。

输入格式
输入数据仅一行,包含一个正整数n(n<=20)。

输出格式
输出数据最多包括10行,每行由n个整数组成,表示前十个符合条件的素数环(不足十个时全部输出)。所有素数环第一个元素必须是1,且按照从小到大的顺序排列。

样例
输入 #1
6
输出 #1
1 4 3 2 5 6
1 6 5 2 3 4
数据范围与提示
无
                        */
                        
#include<bits/stdc++.h>
using namespace std;
int n;
int p[25];//用来存储
int pan[25];//用来判断是否用过 
int su(int a){
	if(a<=1) return 1; 
	for(int i=2;i*i<=a;i++){
//		cout<<1;
		if(a%i==0){
			return 1;
		}
	}
	return 0;
}
void dfs(int step){
	if(step>n){
		if(su(p[1]+p[n])==0){
			for(int i=1;i<=n;i++){
//				cout<<"1"<<" ";
				cout<<p[i]<<" ";
			}
			cout<<endl;
			return;
		}
	} 
	for(int i=1;i<=n;i++){
		if(su(p[step-1]+i)==0&&pan[i]==0){
			p[step]=i;
			pan[i]=1; 
			dfs(step+1);
			pan[i]=0;
		}
	}
	
}
int main(){
	cin>>n;
	p[1]=1;//固定p[1]为1
	pan[1]=1;//标记为已用
	dfs(2);
	
	return 0;
} 
2024/8/10 12:31
加载中...