我尝试用 Javascript 为 23 名学生做一个生日悖论事件,它应该给我 51% 的平均概率,但它总是给我 67% 左右的数字。代码如下:
var pers = [];
var D = 0;
for (var i = 0; i < 10000; i++) {
for (var k = 0; k < 23; k++) {
pers.push(Math.floor((Math.random()*366) + 1));
}
var npers = pers.slice();
npers.sort();
for ( var v = 0; v < npers.length; v++ ) {
if (npers[v-1] == npers[v]) {
D++;
}
}
pers = [];
}
D = D / 100;
var DD = D.toString();
DD = DD + "%";
document.write(DD);
您能告诉我我哪里犯了错误吗?非常感谢。我确信我犯了一个错误,因为我得到的最低百分比是 66%,远远超过了 51% 的目标。 (我已经运行了好几次了)。再次感谢您的帮助,我已经花了好几个小时试图弄清楚我做错了什么,但我无法弄清楚。
最佳答案
您计算的是所有巧合的数量,而不是房间内至少存在一个巧合的情况的数量。也就是说,如果在给定的集合中,例如,有三个人共享生日,或者有两对人共享生日,则将 D
递增两次。
在 D++;
之后添加一个 break;
,您将得到 50% 左右的数字。
顺便说一句,您的 v
循环在索引 npers
下(在 v=0
处,您比较 npers[-1]
反对 npers[0]
) - 但这不会影响结果。
关于javascript - 我的生日悖论事件模拟器在 JavaScript 中运行不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45966567/