实现一个微信红包金额分配算法

Posted by Ethan Blog on July 7, 2021

实现一个类似微信的红包金额分配算法,例如小明在群里发了100元红包,设定10个人分,每个人抢到的金额随机分配。
1.所有人抢到的金额之和要等于红包金额,不能多也不能少。
2.每个人至少抢到1分钱。
3.要保证红包拆分的金额尽可能分布均衡,不要出现两极分化太严重的情况。

二倍均值法

就是把每次随机金额的上限定为剩余人均金额的2倍 假设当前红包金额为m元,剩余人数为n人,那么公式为:

1
2
3
4
5
6
7
//每次抢到的金额 = 随机区间[0.01, m/n * 2 - 0.01] 元
for i=0; i< n-1; i++ {
  //抢到的金额
  amount = rand(0.01, m/n*2-0.01);
  //总数-当前抢到的金额
  m = m - amount;
}

这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。