#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