排列組合實現

2021-04-20 07:23:39 字數 1357 閱讀 1945

** 演算法**與網際網路

組合演算法  

本程式的思路是開乙個陣列,其下標表示1到m個數,陣列元素的值為1表示其下標  

代表的數被選中,為0則沒選中。    

首先初始化,將陣列前n個元素置1,表示第乙個組合為前n個數。    

然後從左到右掃瞄陣列元素值的「10」組合,找到第乙個「10」組合後將其變為  

「01」組合,同時將其左邊的所有「1」全部移動到陣列的最左端。    

當第乙個「1」移動到陣列的m-n的位置,即n個「1」全部移動到最右端時,就得  

到了最後乙個組合。    

例如求5中選3的組合:    

1   1   1   0   0   //1,2,3    

1   1   0   1   0   //1,2,4    

1   0   1   1   0   //1,3,4    

0   1   1   1   0   //2,3,4    

1   1   0   0   1   //1,2,5    

1   0   1   0   1   //1,3,5    

0   1   1   0   1   //2,3,5    

1   0   0   1   1   //1,4,5    

0   1   0   1   1   //2,4,5    

0   0   1   1   1   //3,4,5  

1元 2元 5元 10元 20元 50元 100元自由組合可以組成的數目的多少,並且分別為多少?

根據上次中網友給的乙個方法,實現上面問題的**為:

#include

#include

using namespace std;

#define  m  7

int data[m] = ; // set tags

int money_style[7] = ;

int num = 0;

void initialization(int n)

for(i = n; i < m; i++)      //null position as tag 0 }

void getdata()

i++;              //i++ if i =-1 then start form begin i =0

if(i == m-1)      //if i(0,1,2,3,4,5,6) = 6 ,then finished

break;}}

int main()

return 0;

}

實現排列組合

排列組合是組合數學的基礎,從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...

遞迴實現排列組合

置換 給定n大於等於1個元素的集合,列印這個集合所有可能的置換。我們通過觀察集合,得到生成所有置換的簡單演算法,以下是演算法的構造過程 1 a跟在 b,c,d 的所有置換之後。2 b跟在 a,c,d 的所有置換之後。3 c跟在 a,b,d 的所有置換之後。4 d跟在 a,b,c 的所有置換之後。in...