C 排列組合(從N個數中選擇M個數的所有情況)

2021-08-27 08:28:04 字數 949 閱讀 9252

待選擇的數存放在in矩陣中,矩陣的大小為n,從中選出target=m個數,給出所有可能情況。

思路:in矩陣存放的數為(m=2,n=4):下標0

123元素

123定義乙個數i,從0~2^n,其二進位制位數n位,分別表示是否選擇第n位,

乙個都不選

0000

選擇下標為0的

1000

選擇下標為3的

0001

選擇下標為0,3的

1001

選擇下標為2的

0010

選擇下標為0,2的

1010

選擇下標為2,3的

0011

選擇下標為0,2,3的

1011

選擇下標為1的

0100

選擇下標為0,1的

1100

選擇下標為1,3的

0101

選擇下標為0,1,3的

1101

選擇下標為1,2的

0110

選擇下標為0,1,2的

1110

選擇下標為1,2,3的

0111

選擇下標為0,1,2,3的

1111

可以看出二進位制為1的位數之和等於m的是我們需要的組合

所以接下來遍歷0~2^n的數,找出其中二進位制為1的位數之和等於m的數,並根據1在二進位制中的位置轉換為in的下標,得到輸出矩陣output,其中每個元素都是組合的一種情況。

**如下:

#include #include#includeusing namespace std;

vector> zuhe(vectorin,int target);

output = zuhe(in, 2);

for(auto i:output)

return 0;

}

C 排列組合 N個數中取M個數

感謝一位好朋友和我分享了這樣的乙份 因為自己當時考慮的遞迴演算法相當糾結,怎樣遞迴都不大對,然後我的好朋友和我分享了一段這樣的 我現在分享給大家。題目 在n個數中取m個數,用的方法使用的是開闢乙個長度為100的int型陣列,0 1 2 99 100 比如說測試資料為 4 2 也就是從1 4中取2個數...

從m個數中選擇n個數的實現

從m個數中選出n個數來 0 n m 要求n個數之間不能有重複,其和等於乙個定值k。求一段程式,羅列所有的可能。例如備選的數字是 11,18,12,1,2,20,8,10,7,6 和k等於 18 那麼組合的可能有 18 8,10 2,20 12,6 11,7 11,1,6 1,10,7 12,2,8 ...

輸出從n個數中選m個數的所有組合

題目 n個數1,2,n,從這n個數中任意選m個數,輸出所有不同組合,共有c n,m 種不同組合。如n 5,m 3,會產生如下輸出 5 4 3 5 4 2 5 4 1 5 3 2 5 3 1 5 2 1 4 3 2 4 3 1 4 2 1 3 2 1 解題思路1 採用遞迴的方法,終止條件是當m 0時,...