将数字分解为彼此最接近的加数

时间:2014-06-05 22:51:09

标签: javascript math

我希望这些加数尽可能彼此接近。

x和y - > " y彼此最接近的加号"

15和2 - > 7 + 8

15和3 - > 5 + 5 + 5

15和4 - > 4 + 4 + 4 + 3

15和5 - > 3 + 3 + 3 + 3 + 3

15和6 - > 2 + 2 + 2 + 3 + 3 + 3

...

如果我将x / y除以得到整数,则解是整数的y倍。但是,如果我得到一个小数,它会变得更复杂,如上例所示。

如何计算彼此最接近的那些""任何x和y最好用javascript代码?

3 个答案:

答案 0 :(得分:1)

function closest_summands(x, y) {
    var result = [],
        n = Math.floor(x / y),
        i, j;
    for (i = 0, j = x % y; i < y; i++, j--) {
        result.push(n + (j > 0 ? 1 : 0));
    }
    return result;
}

答案 1 :(得分:1)

计算你师的剩余部分。它会告诉你多长时间需要对分割的确切结果进行舍入而不是向下舍入。

function closest_summands(x, y) {
    var div = x / y,
        rem = x % y,
        res = [];
    for (var i=0; i<rem; i++)
        res.push( Math.ceil(div) );
    for (       ; i<y;   i++) // continue
        res.push( Math.floor(div) );
    return res;
}

当然,您可以通过不重复ceil / floor - 计算来提高效率,我只想展示它是如何工作的。

答案 2 :(得分:0)

如果您从Math.floor(x/y)*y中减去x,则可以使用Bressenham's line algorithm将余数分散到最小差价的条款上。