您的位置:首页 > 其它

输入两个整数 n 和 m,从数列 1,2,3.......n 中随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.

2015-01-07 20:54 573 查看
#include <iostream>
#include <vector>
using namespace std;
// 显示组合
void showCombination(const vector<int>& s)
{
for(int i = 0; i < s.size(); ++i)
{
cout << s[i] << ' ';
}
cout << endl;
}
// 1到n随机取出几个数使其和等于m
void findCombination(int i, int n, int m, vector<int>& s)
{
// 当前数字超出范围,或加上当前数字后会大于总和
if(i > n || i > m)
{
return;
}
else if(i == m) // 加上当前数字正好等于总和
{
s.push_back(i);
showCombination(s);
s.pop_back();
}
else // 加上当前数字后仍然小于总和
{
// 加上当前数字
s.push_back(i);
findCombination(i + 1, n, m - i, s);
s.pop_back();
// 不加上当前数字
findCombination(i + 1, n, m, s);
}
}
int main(int argc, char* argv[])
{
vector<int> s;
findCombination(1, 5, 6, s);
return 0;
}运行结果:
1 2 3 

1 5 

2 4 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐