假设我想让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#编写的代码,我将不胜感激。
答案 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
的可能值;计算结果d
和a
的值,然后打印。请注意,您的循环可以受到其他限制:
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)
这是要点;实施细节留给读者练习。 :-)