红包算法

作者: LiuDa12 | 来源:发表于2017-01-29 02:09 被阅读0次

微信红包

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

普通红包

首先是普通红包~

普通红包普通红包
简单地说就是金额和个数都是固定的……
直接计数红包个数就行了……

拼手气红包

这个就比较有意思了

拼手气红包拼手气红包
需要考虑的东西就比较多了
  • 不能超领(15个包到第14个就领光了)
  • 不能少领(15个包都领完了还剩了钱)
  • 每个包钱数随机
  • 先后拆红包期望相同
  • 单包不超过200

思路

思路借鉴于coderroc
添加200元限制

假设有1000元钱,分给十个人。1000/10 = 100元。这是期望值。从0.01到200的区间中(其中200=期望值×2)Random函数抽取一个数,就是第一个人获得红包的大小。假设第一个人获得了150元,那么剩下的850元平均分给9个人,这九个人平均获得红包大小为94元,那么第二个人的红包大小均匀分布于0.01元到188元的区间中,依次类推。如果Random数超过200重新抽取,如果抽取之后下一次Loop中的期望大于200重新抽取。算法可以保证最后一个人至少抽到0.01元。发红包之前计算期望大于200提示单个红包不多于200元

实现

主体逻辑

public static double getRandomMoney(RedPackage _redPackage) {
    // remainSize 剩余的红包数量
    // remainMoney 剩余的钱
    if (_redPackage.remainSize == 1) {
        _redPackage.remainSize--;
        return (double) Math.round(_redPackage.remainMoney * 100) / 100;
    }
    Random r     = new Random();
    double min   = 0.01; //
    double max   = _redPackage.remainMoney / _redPackage.remainSize * 2;
    double money = r.nextDouble() * max;
    money = money <= min ? 0.01: money;
    money = Math.floor(money * 100) / 100;
    _redPackage.remainSize--;
    _redPackage.remainMoney -= money;
    return money;
}

类体

class RedPackage {
    int    remainSize;
    double remainMoney;
}

需要在获取随机数并计算momey值时加入循环,判断money以及下轮期望是否小于200。如果不成立重新获取随机数。成立跳出Loop。
手机打的手懒就不改代码了

顺便

祝大家春节快乐,万事如意。

我的红包我的红包

相关文章

  • 05 红包算法

    红包算法

  • 红包算法

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

  • 2018-12-21php红包分发算法

  • PHP红包算法

    代码 输出1 array(6) {[0]=>float(5544)[1]=>float(1805)[2]=>flo...

  • 抢红包算法

    抢红包大家都知道,但发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 所有人抢到金额之和等于红包金额,不...

  • 抢红包算法

    今天分享一篇有趣的抢红包算法,基本原理就是“二倍均值”,简单说,也就是一个公式,在这里,令P为人数,M为红包总金额...

  • 抢红包算法@随机算法

    生成随机数 注:randomElement() 如果 range 是空,返回 nil 数组随机 洗牌算法 Swif...

  • Golang洗牌算法,抢红包算法

    本文为转载,原文:Golang洗牌算法,抢红包算法 1. 洗牌算法 洗牌算法,即将原来的顺序打乱,组成新的随机排序...

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

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

  • 尝试写一个抢红包算法

    抢红包算法看似简单,实际还是不简单啊!

网友评论

    本文标题:红包算法

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