实现一个类似微信的红包金额分配算法,例如小明在群里发了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;
}
这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。