JS的概率为10人,在1到20之间选择相同的数字

时间:2013-04-19 01:58:27

标签: javascript

我对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 + "%");      

3 个答案:

答案 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是组合数组声明和匹配检查器的小提琴。