美文网首页
微信红包算法 - OC

微信红包算法 - OC

作者: dymost | 来源:发表于2016-07-29 18:02 被阅读356次

知乎-微信红包算法

  • 一个简单的分配算法:
    • 随机分配n次
    • 把每次分配的部分减去,在进行随机分配
    • 分配过程中,考虑好,分配为0的情况
  • 实现方式1
- (void)weChatRedEnvelopeWithTotalMoney:(CGFloat)totalMoney totalPeople:(NSInteger)totalPeople minMoney:(CGFloat)minMoney{
    
    totalMoney = 100; // 红包总金额
    totalPeople = 3; // 抢红包总人数
    minMoney = 0.01; // 每个人最少能收到0.01元
    
    for (int i = 1; i < totalPeople; i++) {
        
        // 剩下几个人
        NSInteger remainPeopleNum = totalPeople - (i - 1);
        
        // 红包额度峰值
        CGFloat topMoney = totalMoney - minMoney * remainPeopleNum;
        
        // 获取随机金额
        CGFloat rNum = (arc4random_uniform(100) + 1) / 100.0;
        NSLog(@"随机数:%.2f",rNum);
        CGFloat individualMoney = rNum * topMoney + minMoney;
        
        totalMoney = totalMoney - individualMoney;
        
        NSLog(@"第 %zd 个红包: %.2f 元,剩下:%.2f 元\n", i, individualMoney,
              totalMoney);
    }
    NSLog(@"第 %zd 个红包: %.2f 元,剩下:0 元\n", totalPeople,totalMoney);
    
}
思路分析
  • 问题的引发:怎么让一伙人随机分钱

    • 第一种方式,感觉咋都不均匀,前几个人分钱的基数更大,所有他们获得跟多的钱的可能性更大。
  • 如何更均匀的分钱

    • 通过设置一个红包峰值,在每个人的平均幅度中上下跳动
    • 为何是2倍的平均数:简而言之,让这场游戏,有刺激,有波动,但不至于太波动。可以通过统计分析获得比较。
  • 实现方式2

- (void)weChatRedEnvelopeWithTotalMoney:(CGFloat)totalMoney totalPeople:(NSInteger)totalPeople minMoney:(CGFloat)minMoney{
    
     totalMoney = 100; // 红包总金额
     totalPeople = 3; // 抢红包总人数
     minMoney = 0.01; // 每个人最少能收到0.01元
    
    for (int i = 1; i < totalPeople; i++) {
        
        // 剩下几个人
        NSInteger remainPeopleNum = totalPeople - (i - 1);
        
        // 平均每个人多少钱
        CGFloat averageMoney = (totalMoney - (remainPeopleNum) * minMoney) / (remainPeopleNum);
        
        // 红包额度峰值
        CGFloat topMoney = averageMoney * 2; // 关于为什么是2,因为剩下两个人分钱
        
        // 获取随机金额
        CGFloat rNum = (arc4random_uniform(100) + 1) / 100.0;
        NSLog(@"随机数:%.2f",rNum);
        CGFloat individualMoney = rNum * topMoney + minMoney;
        
        totalMoney = totalMoney - individualMoney;
        
        NSLog(@"第 %zd 个红包: %.2f 元,剩下:%.2f 元\n", i, individualMoney,
              totalMoney);
    }
    NSLog(@"第 %zd 个红包: %.2f 元,剩下:0 元\n", totalPeople,totalMoney);
    
}

相关文章

  • 微信红包算法 - OC

    知乎-微信红包算法 一个简单的分配算法:随机分配n次把每次分配的部分减去,在进行随机分配分配过程中,考虑好,分配为...

  • 微信红包算法

    这是我们第二次见面了。 太阳不算热,你撑着伞,疲倦但依旧那么美。 原来你挖了一夜的宝,还仍然和我去看车展。不忍心,...

  • 微信红包随机算法初探

    本文简书备份地址:微信红包随机算法初探 最近看了一篇文章,讲微信红包随机算法的。感觉很不错,所以自己实现了下,并进...

  • 红包算法

    微信红包 初一,一家人聚在一起发红包,便对微信红包算法产生了些兴趣。ps:这里说的是群红包 。 普通红包 首先...

  • 微信红包算法(js)

    下面实现一个微信红包的抽奖模拟,听说是微信的官方算法,我不确定,先看下实现思路(源码在文章最后): 设置最小金额为...

  • 我也来谈谈类似微信红包算法实现

    最近在做一个类似微信红包的 拼手气红包的算法实现。 需求: 客户抛出一个想法 :他想在他的APP中加入类似微信红包...

  • c++代码模拟微信抢红包算法,没人抢得过你!

    算法说明: 微信抢红包基本功能为:提示输入红包总金额和红包份数,保证每个红包的金额随机且不为0,每个红包的金额差距...

  • 基于微信随机红包算法

    微信随机红包算法, 前提为知道红包的数量, 红包总金额, (红包最小金额, 0.01)为防止浮点数计算出现问题,此...

  • 别人在抢微信红包的时候,程序员在研究红包的算法实现

    作者:Small 链接:http://blog.cqcoder.com/微信红包的算法实现探讨/ 突发奇想给校友微...

  • 欧阳泽林:微信红包封面及企业微信在招聘场景中的使用

    1、企业微信最新的“微信红包封面” 定制“微信红包封面”,企业成员领取后可在发微信红包时使用。定制微信红包封面样式...

网友评论

      本文标题:微信红包算法 - OC

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