-
組合:從 n 個不同的元素中取 r 個不同的元素來形成乙個子集,無論它們的元素順序如何,都稱為 n 中 r 個元素的重複組合,例如 or = , n = 4, r = 3,那麼重複組合為:
#include
#include
#include
#include
int n = 33;
int r = 6;
int c[33];
char used[33];
ofstream outfile2("");
void combine(int pos, int h)int i;
如果選擇了 r 元素,請列印它們*
if (pos==r) {
for (i=0; i/ coutoutfile2<< endl;
return;
for (i=h; i<=n-r+pos+1;i++) 用於所有未使用的元素
if (!used[i])
將其放入組合中*
c[pos] = i;
使用該元素*
used[i]++
combine(pos+1,i+1);
恢復到遞迴前的值*
used[i]--
void main(void )
int i;
陣列初始化。
for (i = 0; i < 33; i ++c[i] = i+1;
combine(0,1);
由於答案型別太多,因此無法在DOS環境中顯示,因此將其放置在文字檔案中。 有5m以上。 建議用ue開啟!
-
#include
using namespace std;
int main()
int a[33];
for(int i=0;i<33;i++)a[i]=i;
for(int i0=0;i0<28;i0++)for(int i1=i0+1;i1<29;i1++)for(int i2=i1+1;i2<30;i2++)for(int i3=i2+1;i3<31;i3++)for(int i4=i3+1;i4<32;i4++)for(int i5=i4+1;i5<33;i5++)cout “演算法的複雜度剛好等於組合的數量。
-
首先對 33 個數字進行排序,然後取組合:
不完全重複。
-
沒明白你的意思!
-
c 33 =(3*2*1)/ 3*2*1) =1。
其實就是3選3,多少種方式,明明只有1種。
排列與組合 c 計算方法:
C:指從幾個中選出,不排列,只組合。
c(n,m)=n*(n-1)*.n-m+1)/m!
例如,c53=5*4*3 (3*2*1)=10;另乙個例子是 c(4,2)=(4x3) (2x1)=6。
兩種常用的排列方式,基本計數原理和接頭應用:
1、加法原理及分類計數方法:
每個類別中的每個方法都可以獨立完成此任務,並且兩種不同型別的方法中的具體方法彼此不同(即分類不重複),並且任何完成此任務的方法都屬於某個類別(即分類不省略)。
2.乘法和分步計數方法:
一種方法沒有乙個步驟可以完成這個任務,只有連續完成n個步驟才能完成這個任務,每個步驟計數是相互獨立的。 只要一步到位,就對應的完成方法也不同。
c。堆排序不需要大量的遞迴或多維暫存陣列。 這適用於具有非常大資料量的序列。 >>>More