1 solutions
-
0
C :
#include <stdio.h> ///int integer[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int flag[15]; int result[15]; int stack[15],top = 0; int N; int haveResult; int isprime(int n){ for(int i = 2; i <= n / 2; i++){ if(n % i == 0) return 0; } return 1; } void print(){ int i; for(i = 0; i < N - 1; i++){ printf("%d ",result[i]); } printf("%d\n",result[i]); } void primeCircle(int cur){///cur将要填写的位置 if(cur == N){ print(); haveResult = 1; return ; } for(int i = 2; i <= N; i++){///遍历每一个可填数字 if(flag[i - 1] == 0 && isprime(result[cur - 1] + i)){ ///最后一个数字与第一个数字1的和不是质数 if(cur == N - 1 && !isprime(i + 1)){ break; } result[cur] = i; flag[i - 1] = 1; primeCircle(cur + 1); ///返回上一层时,当前位置设置为未入选 if(flag[result[cur] - 1] == 1){ flag[result[cur] - 1] = 0; } } } } int main(void){ result[0] = 1; flag[0] = 1; stack[top++] = 1; while(scanf("%d",&N) != EOF){ haveResult = 0; primeCircle(1); if(haveResult == 0) printf("No Solution\n"); } return 0; }
C++ :
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; int n,a[51]={0},b[51],ans=0; bool f; bool pd1() { memset(b,0,sizeof(b)); for(int i=1;i<=n;i++) if(b[a[i]]==1)return false; else b[a[i]]++; return true; } bool ok(int x) { for(int i=2;i<=sqrt(x);i++) if(x%i==0)return true; return false; } bool pd2() { for(int i=1;i<=n-1;i++) if(ok(a[i]+a[i+1])) return false; if(ok(a[n]+a[1]))return false; return true; } void find(int m) { if(m==n+1) { if(pd1()&&pd2()&&a[1]==1) { for(int i=1;i<=n-1;i++) cout<<a[i]<<" "; cout<<a[n]<<endl; ans++; } return; } for(int i=1;i<=n;i++) { a[m]=i; find(m+1); } } int main() { cin>>n;a[1]=1; find(1); if(ans==0)cout<<"No Solution"<<endl; return 0; }
Java :
import java.util.Scanner; public class Main { static int N; static int visited[]; static int arr[]; static int count=0; public static void main(String[] args) { // TODO Auto-generated method stub Scanner input=new Scanner(System.in); N=input.nextInt(); visited=new int[N+1]; arr=new int[N+1]; for(int i=1;i<=N;i++) { arr[i]=i; } visited[1]=1; dfs(2); if(count==0) { System.out.println("No Solution"); } } static void dfs(int n) { if(n==N+1) { if(sushu(arr[N]+1)) { for(int i=1;i<=N;i++) { System.out.print(arr[i]+" "); } count++; System.out.println(); } return ; }else { for(int i=2;i<=N;i++) { if(visited[i]==0) { if(arr[n-1] %2==0 &&i %2 !=0) { if(sushu(arr[n-1]+i)) { arr[n]=i; visited[i]=1; dfs(n+1); visited[i]=0; visited[i]=0; } } if(arr[n-1] %2!=0 && i %2 ==0) { if(sushu(arr[n-1]+i)) { arr[n]=i; visited[i]=1; dfs(n+1); visited[i]=0; visited[i]=0; } } } } } } static boolean sushu(int n) { for(int i=2;i<n;i++) { if(n%i==0) { return false; } } return true; } }
- 1
Information
- ID
- 689
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By