洛谷 P1036 選數 C語言實現

2021-09-10 17:15:39 字數 1325 閱讀 5529

p1036 選數 - 洛谷

已知 n 個整數 x1,x2,…,xn ,以及1個整數k(k3+7+12=22

3+7+19=29

7+12+19=38

3+12+19=34。

現在,要求你計算出和為素數共有多少種。

例如上例,只有一種的和為素數:3+7+19=29。

輸入格式:

鍵盤輸入,格式為:

n,k(1 <= n <= 20, k < n)

x1,x2,…,xn (1 <= xi <= 5000000)

輸出格式:

螢幕輸出,格式為: 1個整數(滿足條件的種數)。

輸入樣例#1

輸出樣例#1

4 33 7 12 19

1問題的關鍵點是,如何實現在n個數字中將其中的m個數字隨機組合並不出現重複的情況。(即,位置不同但取的m個數是一樣的情況為重複。 eg. 在1, 2, 3, 4, 5中取3個數,1, 2, 3 與 3, 2, 1是一種情況)

對於如何在n個數字中取m個數字這個問題,在看了其他人部落格(參考部落格)學習後採用的方法是

後往前選取,選定位置i後,再在前i-1個裡面選取m-1個。

如 1 2 3 4 5 中選取 3 個 1、選取5後,再在前4個裡面選取2個,而前4個裡面選取2個又是乙個子問題,遞迴即可。

2、如果不包含5,直接選定4,那麼再在前3個裡面選取2個,而前三個裡面選取2個又是乙個子問題,遞迴即可。

3、如果也不包含4,直接選取3,那麼再在前2個裡面選取2個,剛好只有兩個。 縱向看,1、2、3剛好是乙個for迴圈,初值為5,終值為m

橫向看,該問題為乙個前i-1個中選m-1的遞迴。

然後當m為0後,表示已經取了k個數,將b中儲存的k個數相見,然後判斷sum是否為素數,若為素數則計數t+1。

最後輸出t就是最後答案。

#include

intsushu

(int n)

;void

fun(

int n,

int m)

;int a[22]

, b[21]

, n, k, t =0;

intmain()

void

fun(

int n,

int m)

//從n裡面選m個數字

for(i = n ; i >= m; i--)}

intsushu

(int n)

洛谷P1036 選數

已知 n 個整數 x1,x2,xn,以及乙個整數 k k n 從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3,4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為 3 7 12 22 3 7 19 29 7 12 19 38 3 12 19 34。...

洛谷 P1036選數

已知 n 個整數 x1,x2,xn以及1個整數k k3 7 12 22 3 7 19 29 7 12 19 38 3 12 19 34 現在,要求你計算出和為素數共有多少種。例如上例,只有一種的和為素數 3 7 19 29。輸入格式 鍵盤輸入,格式為 n,k 1 n 20,kx1,x2,xn 1 x...

洛谷P1036選數

題目描述 已知 n 個整數 x1,x2,xn,以及1個整數k k3 7 12 22 3 7 19 29 7 12 19 38 3 12 19 34 現在,要求你計算出和為素數共有多少種。例如上例,只有一種的和為素數 3 7 19 29 輸入樣例 4 33 7 12 19 輸出樣例 1 include...