YCOJ組合 判斷素數

2021-09-10 19:05:59 字數 1811 閱讀 9692

description

已知 n 個整數b1,b2,…,bn

以及乙個整數 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。

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

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

特別說明:輸入資料中如果有重複,由於下標不同,被認為是不同,比如,3,1,2,3 中下標為1的3和下標為4的3不同。因此,此處的3 + 2 = 5 和 2 + 3 = 5 均應該被統計。

input

第一行兩個整數:n , k (1<=n<=20,k<n) 第二行n個整數:x1,x2,…,xn (1<=xi<=100000)

output

乙個整數(滿足條件的方案數)。

sample input 1

4 33 7 12 19

sample output 1

1——摘自ycoj

在做這道題時,我們可以看一看另一道題:

組合的輸出

description

排列與組合是常用的數學方法,其中組合就是從n個元素中抽出r個元素(不分順序且r≤n),我們可以簡單地將n個元素理解為自然數1,2,…,n,從中任取r個數。

現要求你用遞迴的方法輸出所有組合。

例如n=5,r=3,所有組合為:

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

input

一行兩個自然數n、r(1sample input 1

5 3sample output 1

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

——摘自ycoj

依舊是一道dfs。

組合的輸出並不難,只要處理好了細節問題,就變得簡單。

但這到題不是重點,它只是組合+判斷素數要用到的一部分,所以直接上**:

#includeusing namespace std;

int a[1000];

int n,r;

void dfs(int sum)

然後,是不是有很大的相似之處?

組合+判斷素數只多了乙個將數加起來,並判斷它的和是否為素數。

所以,我們定義乙個新的函式,用於判斷素數。

bool in(int t)

} return 1;

}

在把它加進組合的輸出,並對**進行改進,就完成了。

#includeusing namespace std;

int a[1000],b[1000];

int n,r;

int ans=0;

bool in(int t)

} return 1;

}void dfs(int sum)

for(int i=a[sum-1]+1;i<=n;i++)

}int main()

dfs(1);

cout

}

dfs組合 判斷素數

遞迴入門 組合 判斷素數 時間限制 1 sec 記憶體限制 128 mb 提交 205 解決 77 提交 狀態 討論版 命題人 外部匯入 題目描述 已知 n 個整數b1,b2,bn 以及乙個整數 k k n 從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3,4 個整...

DFS 組合 判斷素數

題目描述 已知 n 個整數b1,b2,bn,以及乙個整數 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...

c 組合and判斷素數

已知 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。...