微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将所有组合放入数组中,其中所有条目的总和等于给定整数

如何解决将所有组合放入数组中,其中所有条目的总和等于给定整数

我正在尝试以给定的固定大小在数组内获取所有可能的组合,其中所有条目的总和等于给定的整数。 示例:

给定整数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] 举报,一经查实,本站将立刻删除。