1 solutions

  • 0
    @ 2024-12-11 0:16:56

    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