输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来
n小于m/2
点击(此处)折叠或打开
-
vector<int> list1; //01背包问题
-
-
void find_factor(int sum, int n)
-
{
-
if(n<=0||sum<0)
-
{
-
return;
-
}
-
if( sum==0 )
-
{
-
for(vector<int>::iterator iter=list1.begin(); iter<list1.end()-1; iter++)
-
{
-
cout<<*iter<<\"+\";
-
}
-
cout<<*iter++;
-
cout<<endl; //后置++的运算符的优先级高于*
-
return;
-
}
-
list1.push_back(n);
-
find_factor(sum-n, n-1);
-
list1.pop_back();
-
find_factor(sum, n-1);
- }
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29012686/viewspace-1144537/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29012686/viewspace-1144537/
本文介绍了一种递归算法来解决组合和问题:给定两个整数 n 和 m,在数列 1 至 n 中找到所有可能的组合,使得这些组合的元素之和等于 m。该算法使用了一个辅助向量 list1 来存储当前组合,并通过递归调用 find_factor 函数来寻找所有可能的组合。
323

被折叠的 条评论
为什么被折叠?



