輸入兩個整數n和m,從1-n中隨意取幾個數,使其和等於m
阿新 • • 發佈:2019-01-01
程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。
求解思路:
1.首先判斷,如果n>m,則n中大於m的數不可能參與組合,此時置n = m;
2.遞迴求解
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void dfs(int &n,vector<vector<int>> &res,vector<int> &tmp,int m,int index)
{
if(m==0)
res.push_back(tmp);
else if(m>0)
{
for(int i=index;i<=n;i++)
{
tmp.push_back(i);
dfs(n,res,tmp,m-i,i+1);
tmp.pop_back();
}
}
}
vector<vector<int>> find(int n,int m)
{
vector <vector<int>> res;
vector<int> tmp;
if(n>=m)
n=m;
dfs(n,res,tmp,m,1);
return res;
}
int main()
{
int n,m;
while(cin>>n>>m)
{
vector<vector<int>> res=find(n,m);
for(int i=0;i<res.size();i++)
{
for (int j=0;j<res[i].size();j++)
cout<<res[i][j]<<" ";
cout<<endl;
}
}
return 0;
}