微信红包随机分配算法初探
2017-02-11 21:36
330 查看
微信红包随机分配算法初探
大家平时都在使用微信收发红包,玩的不亦乐乎。别人在抢红包,而程序员在研究红包算法。那么微信红包的随机分配算法是怎么实现的呢?怎么保证没人都领得到,而且满足正态分布呢?我猜想的算法大概是这样的红包领了不少,据观察红包主要有以下几个限制条件:
所有人都能分到红包,也就是不会出现红包数值为0的情况。
所有人的红包数值加起来等于支付的金额。
红包波动范围比较大,约5%~8%的红包数值在平均值的两倍以上,同时数额0.01出现的概率比较高。
红包的数值是随机的,并且数值的分布近似于正态分布。
假设
比如100元,由10个人分,那么平均一个人是10元钱。然后付款后,系统开始分份儿。第一份:系统由0~10元之间随机一个数,作为这一份的钱数,设x1。
第二份:剩下的钱(100-x1),系统由0~(100-x1)/(10-1)随机一个数,作为这份的钱数,设x2
.。。。
第n份:剩下的钱(100-x1-x2-…-xn),系统由0~(100-x1-x2-…-xn-1)/(10-n)随机一个数,作为这个份的钱数,设为xn。
代码块实如下
:package com.qidi.platform.ui.logging; import java.util.Random; /** * 微信红包分配算法@柒地科技 * @author 超哥 * @version v 1.0 * */ public class WeixinMoney { private int peoples; //几个人分 private double allMoney; //总金额 public WeixinMoney(int peoples,int allMoney){ this.peoples =peoples; this.allMoney = allMoney; } public static double getMoney(WeixinMoney wmoney){ if (wmoney.getPeoples()==1) { wmoney.setPeoples(0); return wmoney.getAllMoney(); } //随机分配算法 Random r = new Random(); double min = 0.01; // double max = wmoney.getAllMoney()/wmoney.getPeoples()*2; double money = r.nextDouble()*max; money = money <= min ? 0.01: money; money = Math.floor(money * 100) / 100; wmoney.setPeoples(wmoney.getPeoples()-1); wmoney.setAllMoney(wmoney.getAllMoney()-money); return money; } public static void main(String[] args) { int people = 5; WeixinMoney w = new WeixinMoney(people, 100); double all =0d; for (int i = 0; i <people; i++) { double d = WeixinMoney.getMoney(w); System.out.println(d); all+=d; } System.out.println("总共=="+all); } public int getPeoples() { return peoples; } public void setPeoples(int peoples) { this.peoples = peoples; } public double getAllMoney() { return allMoney; } public void setAllMoney(double allMoney) { this.allMoney = allMoney; } }
相关文章推荐
- Python版微信红包分配算法
- 微信红包随机生成算法php版
- 微信随机生成红包金额算法php版
- Java实现红包随机分配算法
- Java仿实现微信红包分配算法
- 微信红包随机生成算法(PHP版)
- java实现微信红包分配算法
- 微信随机生成红包金额算法php版
- 实时随机数算法(微信红包分配算法)
- 微信红包指定总金额随机生成每个红包金额算法
- Python版微信红包分配算法
- 微信随机红包算法
- 微信红包金额分配的算法
- Java仿实现微信红包分配算法
- Java模拟微信红包分配算法
- 微信红包算法-随机加权算法
- 微信红包金额分配的算法 http://timyang.net/architecture/wechat-red-packet/
- Java 实现微信红包分配算法
- php仿微信红包分配算法的实现方法
- java实现微信红包分配算法