機試演算法講解 第44題 深度優先搜尋之素數環問題

2021-07-04 06:27:32 字數 999 閱讀 2399

/*

問題:在給定的1到n的數字中,將數字填入環中,使得環中任意2個相鄰的數字和為素數。按字典序輸出所有符合條件的解

回溯法:列舉每乙個值,第乙個放1時,嘗試放入第二個數字,使其和1的和為素數,放入後再嘗試第三個數,使其與第二個數的和為素數。直到所有數被全部放入環中,

且最後乙個數與1的和也是素數。

若發現當前位置無論放置任何之前未被使用的數均不能滿足條件,回溯改變上乙個數。

輸入:n(1#include #include #define n 17

//用於判定兩個數的和是否為素數。

int prime[13] = ;

//用於存放所有數的和

int ans[n];

bool mark[n];//剪枝標記

//判斷乙個數是否為素數

bool judge(int x)

} return false;

}//判斷最後乙個數和第乙個數是之和是否為質數,若是,輸出答案

bool check(int n)

else

else

}printf("\n");

return true; }}

//num:ans陣列中已經存入的數字,n表示總共輸入的數字個數

void dfs(int num,int n)

} //如果所有數字全部確定完畢,需要檢查第乙個數和第n個數的和是否為質數

if(num==n)

//對第2個數到第n個數進行判定,遞迴判定

for(int i = 2 ; i <= n ; i++) }

}int main(int argc,char* argv)

//設定初始節點,初始標記

ans[1] = 1;

mark[1] = true;

dfs(1,n);

} system("pause");

getchar();

return 0;

}

機試演算法講解 第55題 Piggy Bank

問題 與乙個儲蓄罐,告知空的質量和當前重量,並給定一些錢幣的價值和相應的重量,求儲蓄罐中最少有多少現金。輸入 包含t組測試用例。第一行。每乙個測試用例包含2個整數e和f,表明空儲蓄罐的重量和裝滿錢的重量。10,000g,第二行是每個測試用例,包含乙個整數n 1 n 500 給出了各種硬幣的數量。接下...

機試演算法講解 第58題 輸入外掛程式

輸入外掛程式 scanf快於 cin,在scanf基礎上再次優化,使那些剛超時一點的程式能夠卡金時限範圍。原理 在讀入緩衝中字元的前提下,手動分析字串中輸入的整數 浮點數等我們需要的輸入型別,並將其儲存在變數中 include include include 輸入整數,並將整數儲存在引用變數ret中...

機試演算法講解 第7題 輸出梯形

問題 輸入高度h,輸出高為h,上底邊圍h的梯形 思路 由於多出的底邊x可以設為任意值,不放設x h 第1行,h h 第2行,列印h 1個空格,1個 然後列印h個空格,再列印1個 h 2 1 3 h 2 1 h 2 1 1個 h 2 2 4 h 3個空格,1個 h 2 2 1個 h 1 2 1個 h ...