我有一个数字,我需要分成五部分。但是,我希望每个部分都是一个随机数。但是当所有的部分加在一起时,它们等于原来的数字。我不知道如何使用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;
}
7条答案
按热度按时间mkshixfv1#
设你的数是N,pn是第n部分。要获得5个部件:
编辑2017
编辑2020
我想一些代码不会伤害。使用ES 7生成器:
Fiddle Link
gg58donl2#
将五个最小值(例如
min = 60
)相加:然后求出原始数(
orNumber = 450
)和minSum
之间的差。现在你得到4个不同的随机数,范围从0到1。
按升序排列这些数字。
这些随机受试者中的每一个都执行以下操作:
delta
,得到其中一个部分。最后一部分是
delta
减去所有其他部分。然后,您只需将
min
添加到所有部件。5vf7fwbs3#
该函数生成从0到1的随机数,将它们相加以计算出它们需要乘以什么才能提供正确的范围。它的好处是所有的数字都被公平地分配。
ecbunoof4#
可以使用
do..while
循环从原始数字中减去最小数字,保留原始数字的副本,以便在循环结束时将余数推送到数组中要随机化结果数组的输出,请选择一个大于
min
且小于n
的数字,以创建特定范围内的随机数cs7cruho5#
我为初学者做了一个更长的版本。
kxe2p93d6#
有更有效的方法来编码,但为了解释解决问题的逻辑,这一步一步地走,转换值并解释逻辑。
https://plnkr.co/edit/oToZe7LGpQS4dIVgYHPi?p=preview
svmlkihl7#
评分最高的答案不包括最小变量,所以我做了一些调整: