算法数据结构和算法分析

抽奖函数(给定概率)

2018-06-25  本文已影响12人  xilong

说实话,这个标题还不好描述,举个例子:一等奖,1%;二等奖5%;三等奖:10%;谢谢惠顾:84%;
然后写一个随机抽奖的函数,抽出来的概率 符合上面定义。

let gift=['一等奖:宝马X6', '二等奖:苹果三件套', '三等奖:威戈背包', '谢谢惠顾!'];
//把概率转换为 正数组(一般乘分母就行了)
let probability = [1, 5, 10, 84];

// 这是 固定概率函数,方便理解但是不灵活
function goodluck(a, b) {
    var random = (1 + 5+ 10+ 84) * Math.random();   //因为 Math.random()是生成 [0,1) 随机数,左闭右开
    if(random <84){
        return a[3];
    } else if(random < 94){
        return a[2];
    } else if(random <99){
        return a[1];
    } else {
        return a[0];
    }
};

// 这个可以直接使用
function goodluckAll(obj, luck) {
    let sum = 0,
        factor = 0,
        random = Math.random();

    for(let i = luck.length - 1; i >= 0; i--) {
        sum += luck[i]; // 统计概率总和
    };
    random *= sum; // 生成概率随机数
    for(let i = luck.length - 1; i >= 0; i--) {
        factor += luck[i];
        if(random < factor) return obj[i];
    };
};

// 试一试
let gift=['一等奖:宝马X6', '二等奖:苹果三件套', '三等奖:威戈背包', '谢谢惠顾!'];
let probability = [1, 5, 10, 84];
console.log(goodluckAll(gift, probability));
上一篇下一篇

猜你喜欢

热点阅读