我需要将未知整数分为给定数量的偶数部分的能力的帮助,或者至少要尽可能地做到。各部分的总和应为原始值,但各部分应为整数,并且应尽可能接近。
参数 num:整数-应该分成相等部分的数字
parts:Integer-应该分割数字的部分数 进入
返回值 列表(整数)-零件列表,每个索引代表零件,其中包含的数字代表零件的大小。零件的订购顺序从最小到最大。
这就是我所拥有的
var splitInteger = function(num, parts) {
// Complete this function
var randombit = num * parts;
var out = [];
for (var i = 0; i < parts; i++) {
out.push(Math.random());
}
var mult = randombit / out.reduce(function(a, b) {
return a + b;
});
return out.map(function(el) {
return el * mult;
});
}
var d = splitInteger(10, 5)
console.log(d);
console.log("sum - " + d.reduce(function(a, b) {
return a + b
}));
这是示例测试
let assert = require("chai").assert;
describe('Challenge', function() {
it('Simple Functionality', function() {
assert.deepEqual(splitInteger(10,1), [10]);
assert.deepEqual(splitInteger(2,2), [1,1]);
assert.deepEqual(splitInteger(20,5), [4,4,4,4,4]);
});
});
预期输出示例:
零件数返回值。
完全均匀的零件示例10 5 [2,2,2,2,2]。
即使是零件示例20 6 [3,3,3,3,4,4]。
我遇到错误。
答案 0 :(得分:4)
使用Math.floor(x/y)
可以得到最大整数系数,使用x%y
可以得到余数。比简单地将余数分解为1并将那些1加到相应数量的项目上
const a = 20;
const b = 6;
//x - dividend, y-divisor
const divideToIntegers = (x, y) => [...Array(y-x%y).fill(Math.floor(x/y)),...Array(x%y).fill(Math.floor(x/y)+1)];
const res = divideToIntegers(a, b);
console.log(res);
答案 1 :(得分:3)
尝试这样。
var splitInteger = function(num, parts) {
// Complete this function
var val;
var mod = num % parts;
if(mod == 0){
val = num/parts;
retData = Array(parts).fill(val);
} else {
val = (num-mod)/parts;
retData = Array(parts).fill(val);
for(i=0;i<mod;i++){
retData[i] = retData[i] + 1;
}
retData.reverse()
}
return retData;
}
var d = splitInteger(20, 6)
console.log(d);
console.log("sum - " + d.reduce(function(a,b){return a+b}));
答案 2 :(得分:0)
极其简单的解决方案:
const splitInteger = (number, parts) => {
const remainder = number % parts
const baseValue = (number - remainder) / parts
return Array(parts).fill(baseValue).fill(baseValue + 1, parts - remainder)
}
要从大到小订购:
const splitInteger = (number, parts) => {
const remainder = number % parts
const baseValue = (number - remainder) / parts
return Array(parts).fill(baseValue).fill(baseValue + 1, 0, remainder)
}
现在作为npm模块:split-integer