概率随机数

今天CVTE一面,算法题,没有答上来,晚上想了一想

  • 题目

    0-9几个数中,8和9出现的概率为90%,其他数出现的概率为10%

  • 分析

    let rate = Math.random()为概率

    0<rate<0.9时,随机出现[8,9]中的一个(其中,8、9出现概率相等)

    0.9<rate<1时,随机出现[0,7]中的一个(其中,每个整数出现概率相同)

  • 代码

function Random(x,y) {
    isNaN(x) ? x = 0 : x = parseInt(x);
    isNaN(y) ? y = 1 : y = parseInt(y);
    let temp = x;
    if(x > y){
        x = y;
        y = temp;
    }
    return Math.round(Math.random() * ( y - x) + x);
}

function RateRandom() {
    let rate = Math.random();
    if(rate < 0.9){
        return Random(8,9)
    }else {
        return Random(0,7)
    }
}

for(let i = 0; i < 10000; i++){
    let res = RateRandom();
    res === 9 ? console.log(res) : void(0);
}


  • 优化思路

RateRandom([8,9,0.9],[0,7,0.1]) [8,9]出现概率为0.9,[0,7]出现概率为0.1

RateRandom([8,9,0.9])

RateRandom([0,0,0.3],[1,1,0.5],[2,2,0.2]) 0,1,2出现概率分别为0.3,0.5,0.2


版权声明:本文为sinat_24227777原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。