【发布时间】:2013-04-26 00:41:51
【问题描述】:
我有一个非负值数组。我想构建一个总和为 20 的值数组,以便它们与第一个数组成比例。
这将是一个简单的问题,除了我希望比例数组的总和正好 20,补偿任何舍入误差。
例如数组
input = [400, 400, 0, 0, 100, 50, 50]
会产生
output = [8, 8, 0, 0, 2, 1, 1]
sum(output) = 20
但是,大多数情况都会有很多舍入错误,例如
input = [3, 3, 3, 3, 3, 3, 18]
天真地产生
output = [1, 1, 1, 1, 1, 1, 10]
sum(output) = 16 (ouch)
有没有一种好的方法来分配输出数组,使其每次加起来为 20?
【问题讨论】:
-
不明白这个问题……你说的“比例数组”是什么意思
-
为什么要使用整数类型,而不仅仅是使用浮点类型?
-
解决方案数组中的每个非零数字也非零是否至关重要,或者 [100, 100, 50, 50] 是否可以解析为 [20, 0, 0, 0] ?这将允许某种递减和算法。
-
你愿意接受多少接近完美的比例?如果不使用浮点,您显然无法获得所有数组的精确比例。
-
参见stackoverflow.com/questions/15769948/… 同样的原理也适用于整数。
标签: algorithm math discrete-mathematics