练习38
来源:互联网 发布:游戏编程语言 编辑:程序博客网 时间:2024/04/29 07:56
- #include <stdio.h>
- #include <malloc.h>
- int n;
- int *Num;
- int total;
- int *uses;
- void PrintSubMuster()
- {
- int i;
- int flag = 0;
- printf("{ ");
- for(i=0; i<n; i++)
- {
- if(uses[i])
- {
- if(flag)
- printf(" , ");
- else flag = !flag;
- printf("%d",Num[i]);
- }
- }
- printf(" }/n");
- }
- void AddOne(int k,int sum)
- {
- if(k == n)
- {
- if(sum == total)
- {
- PrintSubMuster();
- }
- }
- else
- {
- uses[k] = 1;
- sum += Num[k];
- AddOne(k+1,sum);
- uses[k] = 0;
- sum -= Num[k];
- AddOne(k+1,sum);
- }
- }
- void main()
- {
- int i;
-
- printf("请输入元素的个数n的值:");
- scanf("%d",&n);
- Num = (int*)malloc(n*sizeof(int));
- uses = (int*)malloc(n*sizeof(int));
- printf("请输入%d个自然数:/n",n);
- for(i=0; i<n; i++)
- {
- scanf("%d",&Num[i]);
- uses[i] = 0;
- }
-
- printf("请输入total的值:");
- scanf("%d",&total);
-
- AddOne(0,0);
-
- free(Num);
- free(uses);
- }