输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来。
就是回溯么,这回路径改用stack数组模拟做了。
// n numbers, print all sum=m
int stack[1024];
int pos = 0;
void sum(int* arr, int n, int m, int i, int s)
{
if(i==n || s==m)
{
if(s==m)
{
int i;
for(i=pos-1;i>0;i--)
{
printf("%d + ", stack[i]);
}
printf("%d = %d \n", stack[0], m);
}
}else
{
if(s<=m)
{
stack[pos++] = arr[i];
sum(arr, n, m, i+1, s+arr[i]);
pos--;
sum(arr, n, m, i+1, s);
}
}
}