c語言實現排列組合

2022-09-11 00:45:27 字數 1317 閱讀 2924

1.求排列組合結果總數

組合:採用遞迴演算法,根據下面第二行公式。

k)排列:採用遞迴。思想來自:

int sumpailie(int n,int

k)

2.展示排列,組合結果。

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

void  pailie(int a,int n,int k,int

level)//(k==n)時為全排列

for (int i = 0; i < n; i++)}}

組合:組合與排列不同的是:不分順序。我們可以假設一直是從前往後選數,那麼前面作為開頭的數,後面就不可以再作為開頭。比如:a,b,c,d。當我第一次選擇第乙個數為a的話,把以a為頭的數選完之後,下一次選第乙個數決不能是a。所以需要有乙個變數來控制所選擇的第乙個數(下面的程式為index)。然後再在第乙個數(比如選擇a)之後的數中挑選接下來的數。選擇接下來的數與上面排列類似。

void  zuhe(int a, int n, int k,int index,int

deep)

printf("\n

");return

; }

for (int i = index; i )

}

完整程式:

#include "stdio.h"

#define max 10

#define length 10

typedef enum boolbool;

char flag[10] ;

int result[10];

int sumzuhe(int n, int k)

void pailie(int a,int n,int k,int level)

for (int i = 0; i < n; i++) }

}void zuhe(int a, int n, int k,int index,int deep)

printf("\n");

return;

} for (int i = index; i

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 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語言實現排列組合演算法問題

排列組合是演算法常用的基本工具,如何在c語言中實現排列組合呢?思路如下 首先看遞迴實現,由於遞迴將問題逐級分解,因此相對比較容易理解,但是需要消耗大量的棧空間,如果執行緒棧空間不夠,那麼就執行不下去了,而且函式呼叫開銷也比較大。1 全排列 全排列表示把集合中元素的所有按照一定的順序排列起來,使用p ...