首頁 > IT教程 > 正文

素數環

2020-02-14 22:31:02 來源:金橙教程網 作者:admin8 瀏覽:60次 「手機版」

素數環

素數環

題目:

給定1到n的數字中,將數字依次填入環中,使得任意相鄰的數字之和為素數。在這里插入圖片描述

要求第一個數為1,輸入的數n為1<n<17

#include<stdio.h>
using namespace std;
int ans[22];		//保存環中的每一個被放入的數
bool hash[22]; 
int n;
//判斷一個數是否為素數,輸入不大于16,故兩數之和必在該數組內 
int prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41};
bool judge(int x){
	for(int i=0;i<13;i++){
		if(prime[i]==x) return true;//在數組中查找若查找成功則該數為素數 
	}
	return false;					//否則不是素數 
} 
void check(){
	if(judge(ans[n]+ans[1])==false) return;//判斷最后一個數和第一個數的和是否為素數 
	for(int i=1;i<=n;i++){					//輸出解,注意最后一個數字后沒有空格 
		if(i!=1) printf(" ");
		printf("%d",ans[i]); 
	}
	printf("\n");	
} 
void DFS(int num){					//遞歸枚舉,num為當前已經放入環中的數字 
	if(num>1) 
	if(judge(ans[num]+ans[num-1])==false) return;
	if(num==n){
		check();
		return;
	}
	for(int i=2;i<=n;i++){
		if(hash[i]==false){			//若i還沒有被放入環中 
			hash[i]=true;
			ans[num+1]=i;
			DFS(num+1);				//嘗試放入下一個數 
			hash[i]=false; 
		}
	}
}
int main(){
	int cas=0;						//記錄case數 
	while(scanf("%d",&n)!=EOF){
		cas++;
		for(int i=0;i<22;i++)
		hash[i]=false;				//初始化
		ans[1]=1;
		printf("case %d:\n",cas);	//輸出case數
		hash[1]=true;
		DFS(1);
		printf("\n"); 
	}
	return 0; 
} 

相關閱讀

華晨宇&山海 單曲循環 我看著天真的自己,出現在沒有我

華晨宇&山海單曲循環我看著天真的自己,出現在沒有我的故事里。

簡單幼兒環保小制作 衛生紙卷芯廢物利用大全

衛生紙筒的廢物利用小制作大全,小動物、城堡、花盆、裝飾、禮盒等,小朋友們看完肯定要后悔沒有把家中的卷紙筒都收集好啦!~▼卷紙筒

幼兒廢物利用手工作品 簡單環保小制作圖片

如今的媽媽本來就很不容易,自打孩子上幼兒園后更是不得了,以前只是覺得養個孩子身體累,不料孩子上幼兒園后才知道心更累!老師每個星期

從0到1的營銷六步閉環(CRM):以客戶為中心的組合營銷系統

項目背景公司是做汽車后市場,基礎業務為洗車,模式為:高端小區地下車庫的汽保站,主要形式為“夜養車”,即:晚上做洗車業務,白天休息。同時

1,判斷一個數是不是質數。 2,選取出100以上、1000以內所

對于大于 1 的數,如果除了 1 和它本身,它不能再被其它正整數整除,那么我們說它是一個質數。曉萌想判斷一個數是不是質數,希望找你寫個

(責任編輯:jjjccc)

關鍵詞:素數,環

福彩3d字谜画谜藏机图