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...