美文网首页程序员
探究下微信抢红包算法

探究下微信抢红包算法

作者: noyya | 来源:发表于2017-10-25 16:00 被阅读124次

    早上看到朋友在晒昨天1024节日福利,5位数红包雨,羡慕感叹之余想探究下微信运气红包的实现。

    重要的几个参数:

    1.红包总金额 (totalMoney)
    2.红包总个数 (totalCount)
    3.剩余红包个数(leftCount)
    4.剩余红包金额 (leftMoney)
    4.当前抢到的红包金额 (money)
    4.红包最大值(maxMoney)//为了不至于每个红包之间差距太过悬殊,微信约定这个最大值为当前红包剩余金额 / 剩余红包个数 * 2。
    5.红包最小值(minMoney)//微信好像是约定好为0.01。我开始还觉得假如1000元红包,只发5个人的话,也会同样出现0.01的情况,那只能说你运气真是背到家了。(好像印象中是有出现500红包抢到过0.1的)

    理论:每次红包抢到的金额范围为 [minMoney, maxMoney],当红包剩余个数为1时,该轮红包金额为当前红包剩余金额。

    代码:

    self.leftMoney = totalMoney;
    self.leftCount = self.totalCount;
    self.maxMoney = self.leftMoney / self.leftCount * 2;
    
    if (self.leftCount == 1) {
            self.money = self.leftMoney;
            NSLog(@"===============%f",self.money);
     }else{
            int maxint = [NSString stringWithFormat:@"%f",self.maxMoney * 100].intValue;
            self.money = (1 + arc4random()% (maxint + 1))/100.0;
            NSLog(@"===============%f",self.money);
            self.leftCount = self.leftCount - 1;
            self.leftMoney = leftMoney - self.money;
            self.maxMoney = self.leftMoney / self.leftCount * 2;
        }
    

    理论也比较简单,代码实现也不繁琐,上面写的是伪代码,应该看就可以看懂,现在git也挂了,有需要demo的留邮箱

    相关文章

      网友评论

        本文标题:探究下微信抢红包算法

        本文链接:https://www.haomeiwen.com/subject/ojvqpxtx.html