找出所有整数i,j,k> = 0,使得i + j + k <= d?

时间:2019-11-03 17:58:25

标签: c++ math

d作为参数。

这个问题叫什么?这些解决方案是否在C ++中实现?

例如,如果d = 2,则解将给出:

2, 0, 0
0, 2, 0
0, 0, 2
1, 1, 0
1, 0, 1
0, 1, 1
1, 0, 0
0, 1, 0
0, 0, 1,
0, 0, 0

2 个答案:

答案 0 :(得分:1)

这里遵循一些琐碎的代码。这是最佳选择,因为它需要一次生成每个解决方案。

for (int i = 0; i <= d; ++i)
    for (int j = 0; i+j <= d; ++j)
        for (int k = 0; i+j+k <= d; ++k)
            printf("%d + %d + %d <= %d\n", i, j, k, d);

您可以轻松地添加一个附加条件i <= j <= k,如下所示:

for (int i = 0; i <= d; ++i)
    for (int j = i; i+j <= d; ++j)
        for (int k = i+j; i+j+k <= d; ++k)
            printf("%d + %d + %d <= %d\n", i, j, k, d);

答案 1 :(得分:0)

您可能正在寻找错误描述的单词partition。数字分区是将数字表示为正整数(不含0)的方法。