需求
1 2 3 4 5 6 7 8 随机出现的概率 怎么控制 例如 从 1-8中取一个随机数 1 2 3 4 5的概率分别是 14% 6 7 8 出现的概率是 10%
实现
要控制从1-8中取一个随机数出现的概率,可以使用加权随机数生成算法。具体步骤如下:
-
计算每个数字的出现概率。
- 对于数字1、2、3、4、5,设定概率为14%。
- 对于数字6、7、8,设定概率为10%。
-
将每个数字的概率转化为权重。
- 对于数字1、2、3、4、5,权重为14。
- 对于数字6、7、8,权重为10。
-
计算总权重。
- 总权重 = 数字1的权重 + 数字2的权重 + … + 数字8的权重。
-
生成一个随机数,取值范围为[1, 总权重]。
-
根据随机数的值选择对应的数字。
- 如果随机数的值在1-14之间,则选择数字1。
- 如果随机数的值在15-28之间,则选择数字2。
- 以此类推,根据权重的范围选择对应数字。
通过这种方式,可以实现不同数字出现的概率控制。请注意,概率的具体数值和权重的设定需要根据实际需求进行调整。
方法一
第一个示例的JavaScript代码,用于根据设定的概率生成随机数:
function getRandomNumber() {
const probabilities = [0.14, 0.14, 0.14, 0.14, 0.14, 0.10, 0.10, 0.10];
const totalWeight = probabilities.reduce((a, b) => a + b);
const randNum = Math.random() * totalWeight;
let cumulativeWeight = 0;
for (let i = 0; i < probabilities.length; i++) {
cumulativeWeight += probabilities[i];
if (randNum <= cumulativeWeight) {
return i + 1;
}
}
}
// 测试运行
const randomNumber = getRandomNumber();
console.log("随机数:", randomNumber);
在这个代码中,使用一个 probabilities
数组存储了每个数字出现的概率。totalWeight
变量计算了总权重。getRandomNumber
函数使用 Math.random
生成一个 [0, totalWeight) 范围内的随机数,并使用累积权重的方式来判断该随机数对应的数字。
你可以根据需求修改 probabilities
数组的数值来控制不同数字的出现概率。确保概率值之和为1,或者权重之和为总权重。
请注意,JavaScript 的 Math.random
函数返回一个 [0, 1) 范围内的随机数。因此,我们将这个随机数乘以 totalWeight
来得到一个 [0, totalWeight) 范围内的随机数。
方法二
function getRandomNumber() {
const probabilities = [0.14, 0.14, 0.14, 0.14, 0.14, 0.10, 0.10, 0.10];
const cumulativeProbabilities = [];
let cumulativeProbability = 0;
for (const probability of probabilities) {
cumulativeProbability += probability;
cumulativeProbabilities.push(cumulativeProbability);
}
const rand = Math.random();
for (let i = 0; i < cumulativeProbabilities.length; i++) {
if (rand <= cumulativeProbabilities[i]) {
return i + 1;
}
}
}
// 测试运行
const randomNumber = getRandomNumber();
console.log("随机数:", randomNumber);
在这个方法中,我们首先将概率列表转换为累积概率数组。接下来,我们生成一个0到1之间的随机数,然后根据随机数落在累积概率数组的区间来确定对应的数字。
这种方法可以使得概率分布更加精确,但需要相应的累积概率计算。你可以根据你的具体概率要求修改概率列表和权重,以适应你的应用场景。