• 【Java 基础领域】手气红包实现思路、代码


    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);
        }
    }
    
  • 相关阅读:
    P1168 中位数(对顶堆)
    P2341 [HAOI2006]受欢迎的牛
    P1967 货车运输
    树状数组的神操作QAQ
    P1063 能量项链
    P1429 平面最近点对(加强版)
    P2571 [SCOI2010]传送带
    4 Values whose Sum is 0
    UVA529 Addition Chains
    UVA307 Sticks
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860818.html
Copyright © 2020-2023  润新知