输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来.
这道题,分两种情况:取当前数和不取。
若取,则:
m = m-n;
若不取,则:
n = n-1; m = m;
另外注意条件:
m == 0 ;//输出结果 n <= 0 || m < 0;//返回,因为没有符合结果的值
整体代码为:
#include<bits/stdc++.h> using namespace std; void solve(vector<int> res, int n , int m) { if(m == 0) //输出 { for(auto r1 : res) cout<<r1<<" "; cout<<endl; return; } if(n <= 0 || m < 0)//不符合,返回 return ; vector<int> r = res; solve(res,n-1,m); //递归不选 r.push_back(n); solve(r,n-1,m-n);//递归选 } int main() { vector<int> res; int n,m; cin>>n>>m; n = n>m?m:n;//n大于m肯定没有符合条件的组合. solve(res,n,m); }