正整数 n 所有可能的和式的组合(如; 4=1+1+1+1、 1+1+2、 1+3、2+2、4)
代码的思想是,从最小值开始,依次加入序列中,整体类似DFS(深搜),因为有回退的一步。区别是加入一个值s,代表可加入序列的最小值。
代码:
vector<int> v;
vector<vector<int>> vv;
void fun(int val,int s)
{
if (val == 0) {
vv.push_back(v);
return;
}
for (int i = s; i <= val; i++)
{
v.push_back(i);
fun(val - i,i);
v.pop_back();
}
}
int main()
{
fun(10,1);
for (int i=0;i<vv.size();i++)
{
for (int j = 0; j < vv[i].size(); j++
cout << vv[i][j];
cout << endl;
}
return 0;
}
输出:
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 3
1 1 1 1 1 1 2 2
1 1 1 1 1 1 4
1 1 1 1 1 2 3
1 1 1 1 1 5
1 1 1 1 2 2 2
1 1 1 1 2 4
1 1 1 1 3 3
1 1 1 1 6
1 1 1 2 2 3
1 1 1 2 5
1 1 1 3 4
1 1 1 7
1 1 2 2 2 2
1 1 2 2 4
1 1 2 3 3
1 1 2 6
1 1 3 5
1 1 4 4
1 1 8
1 2 2 2 3
1 2 2 5
1 2 3 4
1 2 7
1 3 3 3
1 3 6
1 4 5
1 9
2 2 2 2 2
2 2 2 4
2 2 3 3
2 2 6
2 3 5
2 4 4
2 8
3 3 4
3 7
4 6
5 5
10
版权声明:本文为u010551600原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。