题目大意:
输入一个n,用1到n的n个数组成一个质数环,第一个数必须是1,要求相邻两数之和是质数,最后一个数和第一个数之和也是质数。
题目分析:
简单DFS,注意判断最后一个数和第一个数之和是否为质数。
输入一个n,用1到n的n个数组成一个质数环,第一个数必须是1,要求相邻两数之和是质数,最后一个数和第一个数之和也是质数。
题目分析:
简单DFS,注意判断最后一个数和第一个数之和是否为质数。
源代码:
#include<iostream> #include<string.h> using namespace std; int prime[40]; int zhi[12]={2,3,5,7,11,13,17,19,23,29,37,39}; int used[22]; int num[22],cur,n; void dfs(int a); int main() { memset(prime,0,sizeof(prime)); for(int i=0;i<12;i++) prime[zhi[i]]=1; int i=0; while(cin>>n) { i++; cur=1; cout<<"Case "<<i<<':'<<endl; memset(used,0,sizeof(used)); memset(num,0,sizeof(num)); num[1]=1;used[1]=1; dfs(1); cout<<endl; } return 0; } void dfs(int a) { if(cur==n&&prime[1+a]==1) { for(int i=1;i<n;i++) cout<<num[i]<<' '; cout<<num[n]<<endl; return; } for(int i=2;i<=n;i++) { if(!used[i]&&prime[a+i]) { num[++cur]=i; used[i]=1; dfs(i); used[i]=0; cur--; } } return; }
当前水平评级:2