1 //start 是從哪個開始取, picked代表已經取了多少個數
2 //process和data是全局變量數組
3 //語言說明比較難,我舉個例子吧
4 //從[ 1, 2, 3, 4 ]中選取 2 個數
5 //然後可以依次得到
6 // 1 2
7 // 1 3
8 // 1 4
9 // 2 3
10 // 2 4
11 // 3 4
12 void combination(int start, int picked)
13 {
14 if (picked == m) {
15 for (int j = 0; j < m; j++) //打印出來
16 cout << process[j] << "\t";
17
18 cout << endl;
19 return ;
20 }
21
22 int max = n - m + picked; //選取第x個數時,最大data下標, 例如第一個數時 max = 4 - 2 + 0,
23
24 for (int i = start; i <= max; i++) {
25 process[picked] = data[i];
26 combination(i+1, picked+1);
27 }
28 }
這方法是根據 http://blog.csdn.net/wumuzi520/article/details/8087501#comments 文章上面的方法一改編的, 覺得組合反過來不太好理解, 所以我寫了個翻版。 這文章上面的方法二是個好方法。大家也可以去學一下。第一次寫博客,寫得不好希望大家見諒。