1. 程式人生 > >輸入兩個整數n和m,從1-n中隨意取幾個數,使其和等於m

輸入兩個整數n和m,從1-n中隨意取幾個數,使其和等於m

程式設計求解,輸入兩個整數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; }