全部和的加法数字组合

输入两个整数 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); 
        }   
    }   
}

Leave a Reply

Your email address will not be published. Required fields are marked *