作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,所以我的问题是我有三个随机数生成器,我希望所有三个随机生成的数字(从 1-5 生成)的值加起来为 9。例如,我随机生成一个 4,一个3 和 2。再按一下按钮,5、3 和 1。我已经尝试了一段时间,但就是无法弄清楚。
function statGen() {
var x = document.getElementById("number");
x.innerHTML = Math.floor((Math.random() * 5) + 1);
var a = document.getElementById("agl");
a.innerHTML = Math.floor((Math.random() * 4) + 1);
var l = document.getElementById("lck");
l.innerHTML = Math.floor((Math.random() * 3) + 1);
}
<button id="statbutton" onclick="statGen()">Get Numbers</button>
<p id="main">Main:</p>
<p id="number"></p>
<br/>
<p id="Agl">Agl:</p>
<p id="agl"></p>
<br/>
<p id="Lck">Lck:</p>
<p id="lck"></p>
我曾多次尝试循环运行它直到它是数字 9,但这些都不起作用。
最佳答案
到目前为止,所有答案都没有很好的随机性。通过选择第一个数字,然后是第二个,然后是第三个,你对极端有很大的偏见。
让我用一个骰子的例子来说明。假设您想掷三个骰子,它们的总和为 8。如果一次掷一个,则最终排列为 [6, 1, 1] 的概率为 1/6。那是因为在你掷出 6 之后(以 1/6 的概率),唯一可接受的剩余数字是 1 和 1。
实际上,[6, 1, 1] 还不到所有可接受掷骰数的 1/6。例如,从 3 开始给出 [3, 1, 4], [3, 2, 3], [3, 3, 2], [3, 4, 1]。因此,第一个数字为 3 的可能性是 6 的四倍。但其他这些方法并非如此!
所以有几种方法可以获得“良好”的随机性。最简单的实际上是只掷所有三个“骰子”,如果结果不符合您的限制,则将它们全部掷一遍。
function roll() {
return Math.floor(Math.random() * 5 + 1); //1-5 uniformly
}
function chooseNumbers() {
var x = 0, y = 0, z = 0;
while (x + y + z !== 9) {
x = roll();
y = roll();
z = roll();
}
return [x, y, z];
}
对于大多数用途来说,这将非常快,但您最终会扔掉相当数量的卷。另一种选择是枚举(使用代码或手动)您可能的所有排列,然后使用统一的随机数选择一个索引。
var permutations = [
[5, 3, 1],
[5, 2, 2],
[5, 1, 3],
[4, 4, 1],
//...
[1, 3, 5]
];
function chooseNumbers() {
return permutations[Math.floor(Math.random() * permutations.length)];
}
关于javascript - 如何让随机数等于javascript中的特定数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552424/
我是一名优秀的程序员,十分优秀!