非遞迴 求所有組合

2021-10-23 06:37:34 字數 793 閱讀 8849

從[0,nn-1]這nn個數裡面,找到所有組合 例如con(5,3)

0 1 2

0 1 3

0 1 4

0 2 3

0 2 4

0 3 4

1 2 3

1 2 4

1 3 4

2 3 4

類似於加法器,初始是0,1,2

每次給最後的乙個數字加一

令kmax=3,k在[0,kmax]

則第k位置的數字進製的要求是

ve[k] >= n - (kmax - k)

直到ve[0]>0,迴圈結束

#include

#include

using

namespace std;

using ll =

long

long

int;

#define debug(x) cout<<#x<<": "con(ll nn, ll mm)

do cout << endl;

ve[k]++;

if(ve[k]

>= n)

k++;while

(k <= kmax)

k = kmax;}}

while

(ve[0]

==0);

return

true;}

intmain()

求字元的所有組合!

求字元的所有組合,列如輸入三個字元a,b,c,則它們的組合有a,b,c,ab,ac,bc,abc。求n個字元的長度為m的組合分成兩個子問題 求n 1個字串長度為m 1的組合,以及求n 1個字元長度為m的組合。include include includeusing namespace std inc...

非遞迴解決組合問題

從m 個互不相同元素中取 n 個元素,一般選用遞迴或回溯演算法解決,本文旨在利用進製轉換的方法達到這一目的。如下 sub getall byval num as integer,byref x as variant,byref result as string,optional byref all ...

遞迴法求組合數C m,n

假設這樣乙個陣列 1 2 3 4 5 n 5若 m 3 也就是要求c 3,5 首先先選第乙個數 1 那麼剩下的工作就是在2 5之間選擇2個數 如果我們沒有選擇第乙個數 選第二個數2 那麼剩下的工作就是在3 5之間選擇2個數 這樣就很好遞迴了 只需要記錄下當前已經選了幾個數 當前選的最後乙個數是什麼 ...