QQ红包随机分配

2 篇文章 0 订阅
1 篇文章 0 订阅

思路:

将每个红包设置一个期望值,期望值为红包的总金额/人数
每个红包最大金额是:期望值的两倍 。
每个红包最小金额是:0.01 。
如此循环,前面的人如果抢到红包大于期望值,
在这后面抢红包的人期望值会变小。
随机出 “总人数 - 1“的红包数量,
剩下的所有金额则是最后一个红包 --------------------- 本文来自 zhaitonghui 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zhaitonghui/article/details/74946445?utm_source=copy

代码:

function randomMoney1(min:number,max:number):number{

    const Num : number =  Math.floor((Math.random() * max) + min);
    // console.log("生成范围",min,max,Num)
    return Num;
}

function hongbao1(totalMoney:number,totalPerson:number){
    console.log("随机红包===>金额:"+totalMoney+",人数:"+totalPerson+"最开始期望每个人的金额:"+(totalMoney/totalPerson).toFixed(2));
    let moneyArray:number[] = [];
    let Money = totalMoney * 100;
    let total = 0;
    if(totalPerson > 1){
        for(let i = 0;i<totalPerson-1;i++){
            // console.log("后面还要几个人要分钱钱:",totalPerson - i - 1)
            let a = randomMoney1(1,Money-(totalPerson - i - 1))
            Money = (Money - a);
            total += a;
            moneyArray.push(a/100);
        }
    }
    moneyArray.push((totalMoney * 100 - total)/100)
    console.log(moneyArray);
    //验证总数
    let aaa = 0;
    moneyArray.map((item)=>{
        aaa+=item;
    })
    console.log(aaa);
}

hongbao1(50 ,10);


console.log("-----------分割线-----------");

function randomMoney2(min:number,max:number):number{
    const Num : number =  Math.floor((Math.random() * max) + min);
    return Num;
}
function hongbao2(totalMoney:number,totalPerson:number){
    console.log("随机红包===>金额:"+totalMoney+",人数:"+totalPerson+"最开始期望每个人的金额:"+(totalMoney/totalPerson).toFixed(2));
    let moneyArray:number[] = [];
    let Money = totalMoney * 100;
    let total = 0;
    if(totalPerson > 1){
        for(let i = 0;i<totalPerson-1;i++){
            //添加数学期望值
            let Expect = Math.floor(Money / (totalPerson - i));
            let a = randomMoney2(1,Expect*2)
            Money = (Money - a);
            total += a;
            moneyArray.push(a/100);
        }
    }
    moneyArray.push((totalMoney * 100 - total)/100)
    console.log(moneyArray);
    //验证总数
    let aaa = 0;
    moneyArray.map((item)=>{
        aaa+=item;
    })
    console.log(aaa);
}
hongbao2(50 ,10);

运行结果:

这里只是需要注意的是,看第一个,没有使用数学期望的时候,随机数产生的范围,简直了...

至于最后加起来为49.99999999999999,而不是50,这是js内部的原因,不信的话:你看这个,

作为一个小菜鸟,我就先撤退了...大家主要看思路。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值