我希望被请求者彼此尽可能接近。

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代码?

最佳答案

计算您除法的其余部分。它会告诉您需要多长时间对一次除法的确切结果进行四舍五入而不是四舍五入。

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计算来提高效率,我只是想展示它的工作原理。

关于javascript - 将数字分解为彼此最接近的加数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24071481/

10-12 19:21