浅谈微信红包算法

    /*发出一个固定金额的红包  我们需要满足哪些条件呢

      1 所有人抢到的红包等于红包金额,不能多也不能少

       2 每个人至少抢到的红包金额是1分

      3 要确保每个人抢到的金额几率相等

     */

    

    /*可能大家会想到那就用每次抢到的金额 = 随机区间(0,剩余金额)

     这样首先会有一个很大的问题就是首先抢到红包的人金额很大,越往后随机的金额很小

     如下代码

     */

    

    int totlePeople = 10;

    int totleAmount = 100;

    for (int i = 0; i < totlePeople; i ++) {

        int amount = arc4random() % totleAmount;

        totleAmount -= amount;

        NSLog(@"%d",amount);



    }

    

    /* 那这样我们改怎么办呢,其实也不难实现 就是把每次随机的金额上限设为人均金额的两倍

        剩余红包金额为M 剩余数人数为N,那么就有如下的的公式

        每次抢到的红包金额  = 随机区间 (0,M/N * 2)

        代码实现下

     */

    int totlePeople = 10;

    int totleAmount = 100;

    for (int i = 0; i < totlePeople-1; i ++) {

        int amount = arc4random() % (totleAmount/(totlePeople-i)*2);

        totleAmount -= amount;

        NSLog(@"%d",amount);

    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值