從n個數中選取m個數的所有組合
阿新 • • 發佈:2019-01-02
非遞迴實現:
#define N 7
#define M 3
int main()
{ int array[N] = { 1,2,3,4,5,6 ,7 };
int i, j, k;
for (i = 0; i<=N-M; i++)
for (j = i + 1; j<=N-M+1; j++)
for (k = j + 1; k<=N-M+2; k++)
printf("(%d,%d,%d)\n", array[i], array[j], array[k]);
return 0;
}
遞迴實現:從n個數中選取k個數,和為x
int n, k, x, num[100] = {2,3,3,4}; vector<int> temp; void dfs(int index, int nowK, int sum) { if (nowK == k&&sum == x) { for (int i = 0; i < k; ++i) { printf("%d ", temp[i]); } putchar('\n'); return; } if (index >= n || nowK > k || sum > x) return; temp.push_back(num[index]); dfs(index + 1, nowK + 1, sum + num[index]); temp.pop_back(); dfs(index + 1, nowK, sum); }