package com.hblg.day09.redbag;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @author i
* @create 2019/9/8 17:24
* @Description 手气红包
* 我们来假设一种极端情况 某群主发了100元红包 5个包 如果第一个人抢到的钱数是97元 那么后边四人就有一个人抢不到红包
* 但是,如果第一个人抢红包没有抢到 0元 但是这是不允许出现的情况。
* 因此 我们必须规定一种限制,那就是 抢红包最小值到最大值(最大值为当前平均数的2倍)
* 100元 5个包
* 人数 当前平均数 红包范围 建设所抢到的红包
* 第一个人 100/5=20 0.01-40 20
* 第二个人 80/4=20 0.01-40 35
* 第三个人 45/3=15 0.01-30 15
* 第四个人 30/2=15 0.01-30 28
* 第五个人 2
*/
public class LuckyMode implements OpenMode {
@Override
public ArrayList<Integer> divide(int totalMoney, int totalCount) {
//创建一个当前红包集合
ArrayList<Integer> redList = new ArrayList<>();
Integer avgBag = null;
Integer redBagMoney = null;
Random random = new Random();
Integer totalNum = totalCount-1;
Integer result = null;
//遍历
for (int i = 0; i <totalCount-1; i++) {
avgBag = totalMoney/totalNum;//当前平均数 但是会出现不能整除的情况
result = totalMoney%totalNum;//当前可以整除
redBagMoney = random.nextInt(avgBag*2);
//如果不小心被随机到了0 就给他最小的红包
if(redBagMoney==0){
redBagMoney = 1;
}
totalNum--;
totalMoney-=redBagMoney;
System.out.println("被分到的钱数:"+redBagMoney);
redList.add(redBagMoney);
}
redList.add(totalMoney);//最后剩余的钱数给最后一个人
return redList;
}
public static void main(String[] args) {
LuckyMode luckyMode = new LuckyMode();
List<Integer > redBag = luckyMode.divide(500,3);
System.out.println("redBag:"+redBag);
}
}