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

//輸入兩個整數 n 和 m,從數列1,2,3.......n 中 隨意取幾個數, 使其和等於 m ,要求將其中所有的可能組合列出來.
//n=10, m=9
output:
/*9 1
2
3
2 1
4
3 1
4 1
3 2
3 2 1
*/
vector<int> factors;
void findFactor2(int sum,int n){
    if(sum<0||n<0)
        return ;
    if(sum==0){
        for(vector<int>::iterator iter=factors.begin();iter!=factors.end();++iter){
            cout<<*iter<<' ';
        }
        cout<<endl;
        return;
    }


    factors.push_back(n);//典型的01揹包問題  
    findFactor2(sum-n,n-1);//放n,n-1個數填滿sum-n 
    factors.pop_back();
    findFactor2(sum,n-1);//不放n,n-1個數填滿sum   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章