C语言 跪求:输入M个数从中取N个数开展组合并输出所有组合项
C语言 跪求:输入M个数从中取N个数进行组合并输出所有组合项
输入M个数从中取N个数进行组合并输出所有组合项,M、N都是不固定的,例如输入M可以是3、5、9、24也可以是8、4、7、21、6、11,N可以是2也可以是5,当然N<M.(注:要C语言源码,本人只学了C,而且M、N值可以随时输入的)全人在百度搜了一整天也没想要的答案,哪位大侠懂得请帮帮忙,灌水勿犹,谢谢~!
------解决方案--------------------
这个用递归就行,无非有两种情况,一种是取第一个,人后从M-1个当中取N-1个,或者第一个不取,从M-1个当中取N个,这不就形成递归了么,递归结束的条件就是要取得个数小于或者等于0.,这个百度应该能搜到吧,何海涛的博客有类似的题目
------解决方案--------------------
输入M个数从中取N个数进行组合并输出所有组合项,M、N都是不固定的,例如输入M可以是3、5、9、24也可以是8、4、7、21、6、11,N可以是2也可以是5,当然N<M.(注:要C语言源码,本人只学了C,而且M、N值可以随时输入的)全人在百度搜了一整天也没想要的答案,哪位大侠懂得请帮帮忙,灌水勿犹,谢谢~!
------解决方案--------------------
这个用递归就行,无非有两种情况,一种是取第一个,人后从M-1个当中取N-1个,或者第一个不取,从M-1个当中取N个,这不就形成递归了么,递归结束的条件就是要取得个数小于或者等于0.,这个百度应该能搜到吧,何海涛的博客有类似的题目
------解决方案--------------------
- C/C++ code
//id combine(int a[], int n, int m, int b[], int M); //参数: //a 存放候选数字 //n 总项数 //m 取出项数 //b 存放选出结果 //M = m #include "stdio.h" #define MAX 100 void combine(int a[], int n, int m, int b[], int M); int main(void) { int i; int a[MAX], b[MAX]; for (i = 1; i < 100; i++) a[i - 1] = i; combine(a, 5, 4, b, 4); } void combine(int a[], int n, int m, int b[], int M) { int i, j; for (i = n; i >= m; i--) { b[m - 1] = i - 1; if (m > 1) combine(a, i - 1, m - 1, b, M); else { for (j = M - 1; j >= 0; j--) printf("%d ", a[b[j]]); printf("\n"); } } }