1

我对javascript很陌生,所以请放轻松:)

我试图找出 10 个人选择相同随机数 (1 - 20) 的概率。

当我运行代码时,它每次都会返回相同的答案。在比较数字时,我认为第三个 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 + "%");      
4

3 回答 3

2

您制作随机数“数组”的代码是问题的一部分。rndNum只有一个值(它是一个只有一个项目的数组,每次都覆盖它)。您需要array.push()将值添加到数组中。

你想要更像这样的东西:

    var rndNum = [];
    for (var j = 1; j <= 10; j++) {
        rndNum.push(Math.floor(Math.random()* 20) + 1);
    }
于 2013-04-19T02:01:12.170 回答
1

你想知道二十个人选择同一个随机数的概率吗?

alert("The probability of a match is: " + (Math.pow(.1, 20)*100)+ "%");    

或者您想知道二十个人中的任何两个选择相同数字的概率?

alert("The probability of a match is: " + (Math.pow(.9, 20)*100)+ "%");  
于 2013-04-19T02:02:50.117 回答
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++;

是组合数组声明和匹配检查器的小提琴。

于 2013-04-19T03:19:26.207 回答