【每日面試題】輸入n求和爲m的所有組合

題目:輸入兩個整數 n 和 m,從數列1,2,3.......n 中 隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來.

分析,由該題可知是典型的揹包問題,根據該數是否加入進行遞歸運算。

代碼:

//典型揹包問題
void print(int n,int m,vector<int>&list)
{
 if(n==0) return;
 if(m==0)
 {
  for(int i=0;i<list.size();i++)
   cout<<list[i]<<"\t";
  cout<<endl;
  return;
 }
 list.push_back(n);
 print(n-1,m-n,list);
 list.pop_back();
 print(n-1,m,list);
 
}
void printBefore(int n,int m)
{
   vector<int> list;
   if(n==0) return;
   if(n>=m)
   {
    cout<<m<<endl;
       n=m-1;
   }

   print(n,m,list);
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章