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