如何使用Javascript将未知整数除以给定数量的偶数部分

Joh*_*Tee 2 javascript

我需要将未知整数划分为给定数量的偶数部分的能力的帮助,或者至少要尽可能地做到这一点。各部分的总和应为原始值,但各部分应为整数,并且应尽可能接近。

参数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)


Sye*_*een 5

尝试这样。

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)