如何解决将所有组合放入数组中,其中所有条目的总和等于给定整数
我正在尝试以给定的固定大小在数组内获取所有可能的组合,其中所有条目的总和等于给定的整数。 示例:
给定整数n:5,给定数组大小= 4
{0,5} {0,5,0} ... {0,1,4} ... {1,2} ...
我的目标是获得这些组合并将其保存在C ++向量中。 我希望你能帮助我。
解决方法
简单的递归方法:
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> v;
vector<int> parts;
void partitions(int sum,int k) {
if (k == 1) {
parts[k - 1] = sum;
v.push_back(parts);
return;
}
for (int i = 0; i <= sum; i++) {
parts[k-1] = i;
partitions(sum - i,k - 1);
}
}
int main()
{
int k = 3;
int sum = 5;
for (int i = 0; i < k; i++)
parts.push_back(0);
partitions(sum,k);
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < v[i].size(); j++)
cout << v[i][j] << " ";
cout << endl;
}
return 0;
}
5 0 0
4 1 0
3 2 0
2 3 0
1 4 0
0 5 0
4 0 1
3 1 1
2 2 1
1 3 1
0 4 1
3 0 2
2 1 2
1 2 2
0 3 2
2 0 3
1 1 3
0 2 3
1 0 4
0 1 4
0 0 5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。