做題筆記 遞迴模擬(洛谷 P1036 選數)

2021-09-26 02:48:51 字數 1104 閱讀 9007

不想點進鏈結裡的話看這裡

我們來分析一下題目

題目要求是在n個數裡面選k個相加等於素數,那麼我們第一步就是要寫好乙個判斷素數的函式

判斷素數很簡單,我之前在洛谷寫過乙個部落格,大家可以去看看 判斷素數最簡單的三種方法,這裡我就直接貼**

//判斷素數

bool isprime(int n)

return 1;

}

ok我們接著往下寫

n個數取k個,要求出都多少種取法,那當然是用遞迴,但是這裡還有乙個去重的問題

拿在4個數里取2個舉例,假設四個數為1 2 3 4

簡單畫了個圖示

我們讓1和2,3,4分別組合,再從2開始讓2與大於2的數組合,最後是從3開始和4組合,到4這裡就不能往後取了,結束

這樣取數是小學就學過的技巧,可以有效去重

所以我們可以遞迴模擬這個取數的過程

上**

//遞迴,**的主要部分

void dg(int m,int sum,int startx)

for(int i=startx;i遞迴的函式也寫好了,那麼可以寫主函式輸入資料了

最後放上完整ac**

#include#include#includeusing namespace std;

bool isprime(int n)

return 1;

}int n,k,a[25];

bool v[25];

long long ans=0;

void dg(int m,int sum,int startx)

for(int i=startx;i>n>>k;

for(int i=0;i>a[i];

} dg(0,0,0); //這裡是呼叫遞迴函式,因為開始遞迴時取數個數,和,起始值都是0,所以寫dg(0,0,0);

cout

洛谷 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,以及乙個整數 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...