这样为什么不对?
查看原帖
这样为什么不对?
730192
gaomingyang101011楼主2024/7/12 11:01
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int n,a[20];
bool vis[20];
int ii;
bool p(int n){
	int i;
	if(n==2) return true;
	if(n<2)	return  false;
	for(int i=2;i<=sqrt(n);i++)
		if(n%i==0)
			return false;
	return true;
}
void dfs(int a,int s){
	if(s==n){
		bool pd=0;
		for(int i=1;i<n;i++){
			if(!p(a[i]+a[i+1])){
				pd=1;
				break;
			}
		}
		if(pd==0&&p(a[1]+a[n])){
			for(int i=1;i<=n;i++) cout<<a[i]<<" ";
			cout<<endl;
		}
	}
	if(a%2==0){
		for(int i=1;i<=n;i+=2){
			if(vis[i]==0){
				vis[i]=1;
				a[s+1]=i;
				dfs(i,s+1);
				vis[i]=0;
			}
		}
	}
	else{
		for(int i=2;i<=n;i+=2){
			if(vis[i]==0){
				vis[i]=1;
				a[s+1]=i;
				dfs(i,s+1);
				vis[i]=0;
			}
		}
	}
}
int main(){
	while(scanf("%d",&n)!='EOF'){
		ii++;
		cout<<"Case "<<ii<<":"<<endl;
		dfs(0,0);
	}
	return 0;
}
2024/7/12 11:01
加载中...