我需要将未知整数划分为给定数量的偶数部分的能力的帮助,或者至少要尽可能地做到这一点。各部分的总和应为原始值,但各部分应为整数,并且应尽可能接近。
参数num:整数-应该分成相等部分的数字
零件数:整数-该数字应拆分为的零件数
返回值列表(整数)-零件列表,每个索引代表零件,其中包含的数字代表零件的大小。从最小到最大的顺序订购零件。
这就是我所拥有的
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
}));Run Code Online (Sandbox Code Playgroud)
这是样本测试
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]);
});
});
Run Code Online (Sandbox Code Playgroud)
预期输出示例:
num份返回值。
完全均匀的零件示例10 5 [2,2,2,2,2]。
甚至零件示例20 6 [3,3,3,3,4,4]也可以。
我收到一个错误。
Yev*_*kov 10
您可能会获得最大整数系数,x/y四舍五入为整数,并用余数x%y。比简单地将余数分解为1并将那些1加到相应的项目数上:
const breakIntoParts = (num, parts) => Array.from({length: parts}, (_,i) => 0|(i < num%parts ? num/parts+1 : num/parts))
console.log(JSON.stringify(breakIntoParts(20, 6)));Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {min-height: 100%}Run Code Online (Sandbox Code Playgroud)
尝试这样。
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}));Run Code Online (Sandbox Code Playgroud)