不想點進鏈結裡的話看這裡
我們來分析一下題目
題目要求是在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...