給定乙個陣列,輸入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...