從陣列中取出m個數相加的結果 組合

2021-10-04 06:58:25 字數 1185 閱讀 9664

給定乙個陣列,輸入m,求出m個數相加的和。

num[6]=;

#include

#include

using

namespace std;

int flag[

100]

;void

dfs(

int*num,

int m,

int sum,

int now,set<

int>

& ans)

for(

int i=

0;i<=

5;i++

)//從num中選出數字 }}

intmain

(void);

int m;

cin>>m;

set<

int>ans;

int cot=0;

dfs(num,m,0,

0,ans)

;for

(auto a:ans)

cout<<

"共"<}

主要是用了set去重,否則結果會重複。

但是如果從另一方面來看,當順序也不同得時候,不去重反而是對的。

比如 1,2 和 2,1 ,雖然相加都是3,但要求 順序的時候,是不同的。

另一種,當前 i 要往下搜的時候,設定迴圈的開始為i+1,這樣有效避免了重複。

#include

#include

using

namespace std;

vector<

int>ans;

void

dfs(vector<

int>

& num,

int m,

int n,

int index,

int sum)

for(

int i=index;iintmain

(void);

int m=2;

int n=num.

size()

;dfs

(num,m,n,0,

0);int cot=0;

for(

auto a:ans)

cout<<

"共"<"種";

}

利用遞迴,來求任意n個數中取出m個數的全排列

分析 求n個數的全排列,也就是 第乙個數不動,將後面的n 1個數全排 將第二個數和第乙個數交換,將後面n 1個數全排列 注意要換回來 將第三個數和第乙個數交換,然後將後面n 1個數全排 將第n個數和第乙個數交換,然後將後面n 1個數全排 可以利用遞迴的思想來實現,直到n 1等於1 而取出m個數也就是...

從多個數中取出之和等於定值的組合

這個問題也比較常見,網上方法也很多。這裡也是用陣列的方法來完成。用到了集合 子集的思想。注釋中詳細說明了。從m個數中選出n個數來 0 n m 要求n個數之間不能有重複,其和等於乙個定值k,求一段程式,羅列所有的可能。如從 11,18,12,1,2,20,8,10,7,6 中取出之和為18的集合,如 ...

從numpy陣列中取出滿足條件的元素示例

例如問題 從 arr 陣列中提取所有奇數元素。input arr np.array 0,1,2,3,4,5,6,7,8,9 output array 1,3,5,7,9 solution input arr np.array 0,1,2,3,4,5,6,7,8,9 程式設計客棧 solution a...