- 论坛徽章:
- 0
|
本帖最后由 sig13 于 2014-08-15 16:53 编辑
我用递归写了一个,但是也没有解决有重复输入的问题,即输入1,1,1,1这样的情况。- #include <stdio.h>
- int b[16];
- int d(int in)
- {
- static int cnt=0;
- int i;
- printf("%4d: ", cnt++);
- if (in > 0) printf("%d", b[0]);
- for (i=1; i<in; i++) printf("+%d", b[i]);
- printf("\n");
- return 0;
- }
- int p(int a[], int n, int m, int in);
- int p(int a[], int n, int m, int in)
- {
- int i;
- //printf("n=%d, m=%d, in=%d\n", n, m, in);
- if (m < 0) return 0;
- if (m == 0) return d(in);
- if (m == n)
- {
- for(i=0; i<n; i++) b[in+i] = a[i];
- return d(in+n);
- }
- for(i=0; i<n; i++)
- {
- b[in] = a[i];
- p(a+(i+1), n-(i+1), m-1, in+1);
- }
- return 0;
- }
- int main(int argc, char* argv[])
- {
- int a[]={1, 2, 3, 4, 5, 6, 7, 8};
- p(a, 8, 2, 0);
- p(a, 8, 3, 0);
- p(a, 8, 4, 0);
- p(a, 8, 5, 0);
- p(a, 8, 6, 0);
- p(a, 8, 7, 0);
- p(a, 8, 8, 0);
- return 0;
- }
复制代码 |
|