我对javascript很新,所以请放轻松:)
我试图找出10个人选择相同随机数(1 - 20)的概率。
当我运行代码时,它每次都返回相同的答案。我认为在比较数字时,第3个for循环出了问题。一些帮助将非常感激,我已经坚持了3天了:(
var counter = 0;
//Determine probability (percentage)
for (var i = 1; i <=100; i++) {
//Create array with 10 elements and assign each element with random integer (1 - 20)
for (var j = 1; j <= 10; j++) {
var rndNum = [j];
rndNum = Math.random();
rndNum = Math.floor(rndNum * 20) + 1;
}
//Increment counter if match is found
for (var p1 = 1; p1 <= 9; p1++) {
for (var p2 = p1 + 1; p2 <= 10; p2++) {
if (rndNum[p1] == rndNum[p2]) {
counter++;
}
}
}
}
document.write("The probability of a match is: " + counter + "%");
答案 0 :(得分:2)
制作随机数“数组”的代码是问题的一部分。 rndNum
只有一个值(它是一个只包含一个项目的数组,每次都会覆盖它)。您需要array.push()
才能向数组添加值。
你想要更像这样的东西:
var rndNum = [];
for (var j = 1; j <= 10; j++) {
rndNum.push(Math.floor(Math.random()* 20) + 1);
}
答案 1 :(得分:1)
您想知道20个人选择相同随机数的概率吗?
alert("The probability of a match is: " + (Math.pow(.1, 20)*100)+ "%");
或者你想知道20个人中任何两个人选择相同数字的概率?
alert("The probability of a match is: " + (Math.pow(.9, 20)*100)+ "%");
答案 2 :(得分:0)
你的for循环也应该从0开始,而不是一个(数组中的第一个元素是array[0]
:
for (var p1 = 0; p1 <= 8; p1++) {
for (var p2 = p1 + 1; p2 <= 9; p2++) {
if (rndNum[p1] == rndNum[p2]) {
counter++;
}
}
}
您还需要将结果除以10,因为您有1,000次测试(如果您要检查两个是否匹配)。如果你想看看它们是否匹配,你需要的东西是:
var ordered = rndNum.sort();
if(ordered[0] == ordered[9])
counter2++;
Here是组合数组声明和匹配检查器的小提琴。