cjh*_*193 2 javascript arrays math
我有一个数字,我需要将其分成 5 部分。但是,我希望每个部分都是一个随机数。但是当所有部分加在一起时,它们等于原始数字。我不确定如何用 JavaScript 做到这一点。此外,我不希望分割部分的最小值为 0 或 1,我想自己设置最小值。
例如,数字是 450。我希望分割的部分不小于 60。所以首先,数组将是 [60,60,60,60,60]。但我想随机化,以便它们加起来为 450。这样做的最佳方法是什么?
谢谢!
这是我迄今为止尝试过的:
let i = 0;
let number = 450;
let numArray = [];
while(i <= 5){
while(number > 0) {
let randomNum = Math.round(Math.random() * number) + 1;
numArray.push(randomNum);
number -= randomNum;
}
i += 1;
}
Run Code Online (Sandbox Code Playgroud)
将五个最小值(例如min = 60)相加:
var minSum = 5 * min
Run Code Online (Sandbox Code Playgroud)
orNumber = 450然后求出原来的数字 ( ) 和之间的差值minSum。
var delta = orNumber - minSum
Run Code Online (Sandbox Code Playgroud)
现在你得到 4 个不同的随机数,范围从 0 到 1。
将这些数字按升序排序。
Foreach 这些随机数执行以下操作:
delta即可得到其中一个部分。最后一部分是delta减去所有其他部分。
之后您只需将您的添加min到所有部分即可。
让你的数字是 N,让 p n是第 n 部分。获得 5 个部分:
为了让它看起来更随机,在你生成数字后洗牌
我想一些代码不会受到伤害。使用 ES7 生成器:
function* splitNParts(num, parts) {
let sumParts = 0;
for (let i = 0; i < parts - 1; i++) {
const pn = Math.ceil(Math.random() * (num - sumParts))
yield pn
sumParts += pn
}
yield num - sumParts;
}
Run Code Online (Sandbox Code Playgroud)