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);
    }
}