#include <vector>
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
// n: 待分解的数, m: 最大因子
void add_split_stub(std::vector<std::vector<int>>& rs, std::vector<int>& r, int n, int m)
{
if ((n < m) || (n < 0) || (m < 1))
return;
if (n == 0)
{
rs.push_back(r);
}
else
{
if (n == m)
{
r.push_back(m);
rs.push_back(r);
r.pop_back();
}
else
{
r.push_back(m);
n = n - m;
if (m > n)
m = n;
for (int i = m; i > 0; i--)
{
add_split_stub(rs, r, n, i);
}
r.pop_back();
}
}
}
void add_split(std::vector<std::vector<int>>& results, int n, int m = -1)
{
if (n <= 0)
return;
if ((m <= 0) || (n < m))
m = n;
std::vector<int> result;
for (int i = m; i > 0; i--)
{
result.clear();
add_split_stub(results, result, n, i);
}
}
void main(int argc, char **argv) {
std::vector<std::vector<int>> results;
add_split(results, 6);
for (auto e1 : results)
{
for (auto e2 : e1)
{
cout << e2 << " ";
}
cout << endl;
}
cin.get();
}
结果如下
6
5 1
4 2
4 1 1
3 3
3 2 1
3 1 1 1
2 2 2
2 2 1 1
2 1 1 1 1
1 1 1 1 1 1