一個公平的紅包算法(java)

需求

實現一個簡單的紅包分配算法,要求:

  1. 多個人分一個紅包
  2. 每人最少分1元
  3. 儘量平均
  4. 所有人紅包總額等於總金額

實現思路

順序拿紅包,每個人拿走一個隨機金額,隨機範圍是剩餘人均金額的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倍)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章