分配红包金额的核心思路
红包采取预分配策略,使用队列结构存储,抢红包时按照先进先出的机制,从队列中逐个pop();
多次使用分配算法,对结果统计正态分布图。
符合总体均匀,且上下有一定波动。
## 具体的代码实现 java
public class RedPkgUtils
{
private final static Integer MIN_ROB_GOLD = 1;
public static List<Integer> randomRedPacket(int money, int number)
{
int count = number;
money = money - number * MIN_ROB_GOLD;
List<Integer> list = new ArrayList<Integer>(number);
for(int i = 1; i<= count; i++)
{
if(number == 1)
list.add((money + MIN_ROB_GOLD));
else
{
int limit = (2*money/number);
if(limit == 0)
list.add(MIN_ROB_GOLD);
else
{
int randomMaoney = RandomUtils.nextInt(limit);
if(randomMaoney > money)
{
randomMaoney = money;
money = 0;
}
else
money = money - randomMaoney;
list.add(randomMaoney + MIN_ROB_GOLD);
}
number--;
}
}
Collections.shuffle(list);
return list;
}
}