m個數取n個進行組合 C m n

2021-08-01 08:51:54 字數 737 閱讀 6797

m個數取n個進行組合:

[10反轉置換法]

演算法思想:

(1) 初始化乙個m個元素的陣列(全部由0,1組成),將前n個初始化為1,後面的為0。這時候就可以輸出第乙個組合序列了。

(2) 從前往後找,找到第乙個10組合,將其反轉成01,然後將這個10組合前面的所有1,全部往左邊推 ,即保證其前面的1都在最左邊。這時又可以輸出一組組合序列了。

(3) 重複第(2)步,知道找不到10組合位置。這時已經輸出了全部的可能

#include 

#include

void putout(int * num,int m)

printf("\n");

}int check(int *num,int m,int n)

}return0;}

void chosenum(int *num,int m,int n)

if(*(num+i)) //統計前面出現出現1的次數

count++;

}for(j=0;jif(j//將前面幾個數全為1

else

//後幾個數為0

}putout(num,m);

if(check(num,m,n)!=1)

break;

}free(num);

}int main()

chosenum(num,m,n);

return

0;}

n個數字取m個的組合數

對於這個問題有兩種版本,n個元素互不相同,n個元素有重複。有重複用集合之類的方法去重即可。因此我們解決簡單版本假設n個元素互不相同。emmm 其實應該是同一種方法,第一種回朔法用了系統的棧空間,第二種用了自己建立的棧空間。相比較而言第二種演算法的空間複雜度會低一些,因為借助系統的棧會儲存好多多餘的資...

C 排列組合 N個數中取M個數

感謝一位好朋友和我分享了這樣的乙份 因為自己當時考慮的遞迴演算法相當糾結,怎樣遞迴都不大對,然後我的好朋友和我分享了一段這樣的 我現在分享給大家。題目 在n個數中取m個數,用的方法使用的是開闢乙個長度為100的int型陣列,0 1 2 99 100 比如說測試資料為 4 2 也就是從1 4中取2個數...

求 從m個自然數中任取n個數的所有組合

問題 編寫乙個遞迴演算法,找出從自然數1,2,3,m中任取n個數的所有組合。例如 m 5,n 3時,所有組合為543,542,541,532,531,521,432,431,421,321。方法1 設這m個自然數存放在整數陣列a k 中,a i 存放i 1 0 i n 1 可採用遞迴演算法,例如,m...