我在Clojure中尝试解决一个编程小问题。
说,我有一个带有整数值的列表(它们也包括零)。这些值有一个总和,我想减少一定值。为了获得较低的总和,我想按比例减小列表中的值。
说,我有以下列表:[0,10,30,40,20,0]。总和为100,我想将总和减少为90。我想按比例减少值,因此新列表将为[0,9,27,36,18,0]。
但是,当数字变成小数时,这将成为问题。当您对数字进行四舍五入时(无论是四舍五入,最小或最小),最终的总和都将减少1或2。我似乎找不到完美的解决方案。我得到的一切都包括一次遍历所有值,然后返回以修复偏移量。有任何想法吗?
编辑
为了弄清楚我想看到的行为,四舍五入的方式对我来说并不重要,只要总和正确且数字的比率大致相同即可。我不在乎总错误是最小的还是最大的舍入。
附加要求是仅允许数字保持相等或降低,数字应> = 0,并且结果数字列表应为整数。
clojure ×1