7.31 B

来源:互联网 发布:go语言并发编程实战 编辑:程序博客网 时间:2024/06/06 02:18

                                B - Prime Ring Problem


A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime. 

Note: the number of first circle should always be 1. 

                                                     

Input
n (0 < n < 20). 
Output
The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print solutions in lexicographical order. 

You are to write a program that completes above process. 

Print a blank line after each case. 

Sample Input
68
Sample Output
Case 1:1 4 3 2 5 61 6 5 2 3 4Case 2:1 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2


#include<stdio.h>#include<string.h>int m,n;int a[5000],book[5000];int p[100]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1};void dsf(int x,int y){int i,flag=0,t;for(i=2;i<=y;i++){if(book[i]==0&&p[i+a[x-1]]==1){a[x]=i;book[i]=1;dsf(x+1,y);book[i]=0;}}if(x==y){if(x==y&&p[a[0]+a[y-1]]==1){printf("%d",a[0]);for(i=1;i<y;i++){printf(" %d",a[i]);}printf("\n");}return ;}return ;}int main(){int i,j,k,t;t=1;while(scanf("%d",&n)!=EOF){printf("Case %d:\n",t++);memset(book,0,sizeof(book));a[0]=1;dsf(1,n);printf("\n");}return 0;}




 

原创粉丝点击