给定自定义范围,如何找到该范围内n个数字的所有组合,从而得出目标平均值?

时间:2019-06-25 12:47:08

标签: c# algorithm

假设我想让10项的所有组合从83到86,平均为84。一些解决方案是:

+----+----+----+----+
| 83 | 84 | 85 | 86 |
+----+----+----+----+
|  0 | 10 |  0 |  0 |
|  1 |  8 |  1 |  0 |
|  2 |  6 |  2 |  0 |
|  3 |  4 |  3 |  0 |
+----+----+----+----+

是否存在已知算法来查找我要寻找的组合?特别是如果有用C#编写的代码,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

这是一个简单的线性组合。从每个值中减去84;他们现在是[-1,0,1,2]。 The INSERT statement conflicted with the CHECK constraint "C_ALL_TRADE". The conflict occurred in database "RT_AGR_STG_DW", table "dbo.NORM_TRADE_AMOUNT". 是填充值-不会影响平均值。命名计数0,我们有:

a-d

这使得该解决方案可以快速蛮力地处理。遍历a, b, c, d >= 0 a = c + 2d a + b + c + d = 10 c的可能值;计算结果da的值,然后打印。请注意,您的循环可以受到其他限制:

b

输出:

for d in [0 .. 3]
    for c in [0 .. (10 - 3*d) / 2]   // c can take only half the remaining count;
                                     // a gets the rest.
        a = c + 2*d
        b = 10 - (a + c + d)
        print (a, b, c, d)

这是要点;实施细节留给读者练习。 :-)