需求
實現一個簡單的紅包分配算法,要求:
- 多個人分一個紅包
- 每人最少分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倍)