C語言 實現數學排列組合裡的排列演算法

2021-10-23 14:16:47 字數 992 閱讀 5070

1.1 函式的原型

函式的原型:int** permutation(int* iarr,int size);

將陣列的首位址和陣列的大小傳遞進去,函式將返回乙個二維陣列的位址,這個二維陣列包含n!個一維陣列(n即是size),而每乙個一維陣列又包含size個元素,二維陣列的大小為n! * n

1.2 遞迴的大概思路(如圖所示)

假設要陣列的大小(size)為4,則要返回乙個4!* 4大小的二維指標。

//現malloc二維指標,再為每個二維指標指向的一維指標malloc

garr=(int**)malloc(amount*sizeof(int*));

for(int i=0;i結果如圖所示:8!=8x7x6x5x4x3x2x1=40320

生成了4萬多行,主要執行時間用在在列印上了。

缺點是當size增大時,占用記憶體如指數增長。實際上把排列的情況都記錄下來不實際也沒意義。

C語言實現排列組合(全排列)

題目描述 排列與組合是常用的數學方法。先給乙個正整數 1 n 10 例如n 3,所有組合,並且按字典序輸出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 輸入 輸入乙個整數n 1 n 10 輸出 輸出所有全排列 每個全排列一行,相鄰兩個數用空格隔開 最後乙個數後面沒有空格 ...

C語言實現排列組合

include include int array define n 4 define m 3 int results n 儲存已經找到的結果字首陣列 int results end 0 結果字首陣列有效資料下標 int is used n 是否已經排列過了的標誌 排列 param deep 遞迴深...

c語言實現排列組合

1.求排列組合結果總數 組合 採用遞迴演算法,根據下面第二行公式。k 排列 採用遞迴。思想來自 int sumpailie int n,int k 2.展示排列,組合結果。排列 首先從 n 個中取乙個數,再在剩餘的一次次取乙個數,每取乙個數就把這位標記為取過了,以免下次再取。取夠k個數之後,把k個數...