排列組合演算法 遞迴 1

2021-07-11 18:58:24 字數 1072 閱讀 3304

一.從指定陣列a[n]中取出m位,不重複的所有結果

方法:

//獲取的子集合 出現的所有項不會重複,跟子集合的排列順序沒有關係

static void combine(int a, int n, int m, int b, int m)

console.writeline();}}

}

測試:

//排列組合測試

二、給定陣列,將陣列中的元素依次排列,得到新的陣列。

注意:陣列元素個數和新排列陣列個數相同,如果陣列中有相同元素可能會出現相同的排列結果

方法:

static int n = 0;

static void perm(int source, int k, int m)

console.writeline();

n++;

}else

}}static void swap(ref int a, ref int b)

測試:

static void testthree()

; //排列陣列,指定陣列索引的開始位置和結束位置

perm(source, 0, source.length - 1);

console.writeline("總個數:" + n);

排列組合演算法

在開發的過程中很難免會到排列組合,剛開始通過for迴圈來搞定。但是對於工作了近五年的我而已,不能像 新人那樣做了。如果所要組合的集合大於40,你不可能寫40個for迴圈吧!這裡使用了數學的演算法,到底是啥演算法,高人也沒說!不過我把它的思想提公升了一下。如下 ifndef combination h...

排列組合演算法

1.排列演算法 include define max num 100 void print int n,int num void swap int a,int b int arrange int i,int n,int num i return count int combination int u...

排列組合演算法

組合演算法的思路是開乙個陣列,其下標表示1到m個數,陣列元素的值為1表示其下標代表的數被選中,為0則沒選中。初始化,將陣列前n個元素置1,表示第乙個組合為前n個數。從左到右掃瞄陣列元素值的 10 組合,找到第乙個 10 組合後將其變為 01 組合,同時將其左邊的所有 1 全部移動到陣列的最左端。當第...