演算法提高 特殊的質數肋骨

2021-10-02 13:43:45 字數 1166 閱讀 9374

農民約翰母牛總是產生最好的肋骨。你能通過農民約翰和美國農業部標記在每根肋骨上的數字認出它們。農民約翰確定他賣給買方的是真正的質數肋骨,是因為從右邊開始切下肋骨,每次還剩下的肋骨上的數字都組成乙個質數。

例如有四根肋骨的數字分別是:7 3 3 1,那麼全部肋骨上的數字 7331是質數;三根肋骨 733是質數;二根肋骨 73 是質數;當然,最後一根肋骨 7 也是質數。7331 被叫做長度 4 的特殊質數。

寫乙個程式對給定的肋骨的數目 n (1<=n<=8),求出所有的特殊質數。數字1不被看作乙個質數。

單獨的一行包含n。

按順序輸出長度為 n 的特殊質數,每行乙個。

在這裡給出一組輸入。例如:

4
在這裡給出相應的輸出。例如:

2333

2339

2393

2399

2939

3119

3137

3733

3739

3793

3797

5939

7193

7331

7333

7393

剛開始一看這個題我以為是列舉,然後輸出符合要求的數即可,但是這樣就會超時,重新整理思路後,這道題用遞迴可以做。

我們從位數小到位數大一次判斷,以7331為例:最先判斷7,再判斷73,再判斷733,最後判斷7331。這樣轉換起來相對簡單一點,只需要每次乘10加i(x10+i)。

遞迴函式dfs有兩個引數,第乙個是判斷是否是素數的數x,第二是這個數的長度len,如果長度len等於n,輸出x,小於時就進入1-9的迴圈,判斷(x10+i)是否為素數,滿足就呼叫dfs(x*10+i,len+1)。能保證每次遞迴的數都是質數。

#include

#include

using

namespace std;

int n;

bool

just

(int x)

//判斷素數

return

true;}

void

dfs(

int x,

int len)

else}}

}int

main()

藍橋杯 演算法提高VIP 特殊的質數肋骨

題目描述 農民約翰母牛總是產生最好的肋骨。你能通過農民約翰和美國農業部標記在每根肋骨上的數字認出它們。農民約翰確定他賣給買方的是真正的質數肋骨,是因為從右邊開始切下肋骨,每次還剩下的肋骨上的數字都組成乙個質數。例如有四根肋骨的數字分別是 7 3 3 1,那麼全部肋骨上的數字 7331是質數 三根肋骨...

DFS 特殊的質數肋骨

時間限制 1000ms 記憶體限制 256000kb 題目描述 農民約翰母牛總是產生最好的肋骨。你能通過農民約翰和美國農業部標記在每根肋骨上的數字認出它們。農民約翰確定他賣給買方的是真正的質數肋骨,是因為從右邊開始切下肋骨,每次還剩下的肋骨上的數字都組成乙個質數,舉例來說 7 3 3 1 全部肋骨上...

特殊的質數肋骨 DFS

農民約翰母牛總是產生最好的肋骨。你能通過農民約翰和美國農業部標記在每根肋骨上的數字認出它們。農民約翰確定他賣給買方的是真正的質數肋骨,是因為從右邊開始切下肋骨,每次還剩下的肋骨上的數字都組成乙個質數,舉例來說 7 3 3 1 全部肋骨上的數字 7331是質數 三根肋骨 733是質數 二根肋骨 73 ...