需求
实现一个简单的红包分配算法,要求:
- 多个人分一个红包
- 每人最少分1元
- 尽量平均
- 所有人红包总额等于总金额
实现思路
顺序拿红包,每个人拿走一个随机金额,随机范围是剩余人均金额的2倍
代码
package redpackage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 红包算法
* @author: wlfei
* @description: redpackage
* @date:2020年3月26日
*/
public class DivideRedPackage {
public static List<Integer> divideRedPackage(Integer totalMoney, Integer totalPeople) {
List<Integer> moneyList = new ArrayList<Integer>();
Integer restMoney = totalMoney;
Integer restPeople = totalPeople;
Random random = new Random();
for (int i = 0; i < totalPeople - 1; i++) {
int money = random.nextInt(restMoney / restPeople * 2 - 2) + 1;
restMoney -= money;
restPeople--;
moneyList.add(money);
}
moneyList.add(restMoney);
return moneyList;
}
public static void main(String[] args) {
System.out.println(divideRedPackage(1000, 10));
}
}
缺点
不是真正的随机,是有限范围内的随机(剩余人均金额的2倍)
本文介绍了如何使用Java实现一个公平的红包分配算法,确保每人至少分得1元且尽量平均分配。算法思路是顺序分配,每个人领取一个介于剩余人均金额2倍范围内的随机金额。然而,该算法的缺点在于并非完全随机,而是限制在特定范围内。
&spm=1001.2101.3001.5002&articleId=105128282&d=1&t=3&u=54e2b4a5d03048aa86d5727f4fbfd79c)

被折叠的 条评论
为什么被折叠?



