探究下微信抢红包算法

早上看到朋友在晒昨天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的留邮箱

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容