2、输入两个整数 n 和 sum,从数列1, 2, 3, ... , n 中 随意取几个数,使其和等于 sum,要求将其中所有的可能组合列出来. 比如n = 5, sum = 8, 那么所有的组合为: 3 5 或者 1 5 2 或者 1 4 3
[C] 纯文本查看 复制代码 [/font][/color]
[*]#include<stdio.h>
#include<stdlib.h>
int length;
void printResult(int *flag)
{
int i;
for(i=0;i<length;i++)
{
if(flag[i] == 1)
printf("%d ",i+1);
}
printf(" \n");
}
void getSum(int sum,int n,int *flag)
{
if(sum < 1 || n < 1)
return;
if(n > sum)
n = sum;
if(sum == n)
{
flag[n-1] = 1;
printResult(flag);
flag[n-1] = 0;
}else{
flag[n-1] = 1;
getSum(sum - n,n-1,flag);
flag[n-1] = 0;
getSum(sum ,n-1,flag);
}
}
void main()
{
int sum,n;
int *flag;
sum = 1;
n = 1;
length = n;
flag = (int*)malloc(length * (sizeof(int)));
getSum(sum,n,flag);
}
|
|