C 實現排列組合

2021-06-13 14:48:15 字數 1298 閱讀 5676

很多地方都遇過排列組合,比如計算問題的規模,資料的大小,占用磁碟空間多少等。

(1) 全排列:

全排列表示把集合中元素的所有按照一定的順序排列起來,使用p(n, n) = n!表示n個元素全排列的個數。

例如:的全排列為:

123;132;

213;231;

312;321;

共6個,即3!=3*2*1=6。

這個是怎麼算出來的呢?

首先取乙個元素,例如取出了1,那麼就還剩下。

然後再從剩下的集合中取出乙個元素,例如取出2,那麼還剩下。

以此類推,把所有可能的情況取一遍,就是全排列了,如圖:

}排列計算公式

從n個不同元素中,任取m(m≤n)個元素按照一定的順序排成一列,叫做從n個不同元素中取出m個元素的乙個排列;從n個不同元素中取出m(m≤n)個元素的所有排列的個數,叫做從n個不同元素中取出m個元素的排列數,用符號 p(n,m)表示.

p(n,m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)!(規定0!=1).

附上計算公式的**:

#include #include #include using namespace std;

long factorial(int num)

return result;

}long pnm(int num, int len)

intmain(int argc, const char *argv)

//printf("%s", argv[1]);

//return 0;

int num=atoi(argv[1]);

long result = factorial(num);

cout << "factorial result :" 組合部分待續。。

參考:

排列組合實現

演算法 與網際網路 組合演算法 本程式的思路是開乙個陣列,其下標表示1到m個數,陣列元素的值為1表示其下標 代表的數被選中,為0則沒選中。首先初始化,將陣列前n個元素置1,表示第乙個組合為前n個數。然後從左到右掃瞄陣列元素值的 10 組合,找到第乙個 10 組合後將其變為 01 組合,同時將其左邊的...

實現排列組合

排列組合是組合數學的基礎,從n個不同元素中任務m個,約定1從n個不同元素中任取m個 約定1計算a n,m 與c n,m 只要簡單進行乘運算即可,要具體展現出排列的每一列與組合的每一組,絕非輕而易舉。我們應用遞迴設計來具體實現排列與組合。def p n,m,k,a global s if k m fo...

排列組合實現

思想 排列 首先從 n 個中取乙個數,再在剩餘的一次次取乙個數,每取乙個數就把這位標記為取過了,以免下次再取。取夠k個數之後,把k個數輸出,展示結果 所以需要提前有乙個陣列來存放結果 然後再取尋找別的第k個數,依次在不斷尋找別的第 k 1 k 2 個數。取完乙個數把標記位設為未取過。void pai...