美文网首页
尝试写一个抢红包算法

尝试写一个抢红包算法

作者: JarryLeo | 来源:发表于2018-07-26 18:33 被阅读64次

    抢红包算法看似简单,实际还是不简单啊!

    public static List<Double> getRedPacketList(double money, int num) {
            List<Double> redPacketList = new ArrayList<>();
            if (num <= 0) {
                return null;
            }
            //先每个红包塞一分钱
            for (int i = 0; i < num; i++) {
                double base = 0.01;
                if (money >= base) {
                    redPacketList.add(base);
                    money = BigDecimal.valueOf(money).subtract(BigDecimal.valueOf(base)).doubleValue();
                } else {
                    redPacketList.add(0.0);
                }
            }
            //再随机剩余的金额
            for (int i = 0; i < num; i++) {
                Double p = redPacketList.get(i);
                if (money <= 0) {
                    break;
                } else if (i == num - 1) {
                    double pp= BigDecimal.valueOf(p).add(BigDecimal.valueOf(money)).doubleValue();
                    redPacketList.set(i, pp);
                } else {
                    BigDecimal m = BigDecimal.valueOf(money)
                            .multiply(BigDecimal.valueOf(2))
                            .divide(BigDecimal.valueOf(num - i), BigDecimal.ROUND_HALF_EVEN)
                            .multiply(BigDecimal.valueOf(Math.random()))
                            .setScale(2, BigDecimal.ROUND_HALF_EVEN);
                    double pp = BigDecimal.valueOf(p).add(m).doubleValue();
                    redPacketList.set(i, pp);
                    money = BigDecimal.valueOf(money).subtract(m).doubleValue();
                }
            }
            return redPacketList;
        }
    

    相关文章

      网友评论

          本文标题:尝试写一个抢红包算法

          本文链接:https://www.haomeiwen.com/subject/acfimftx.html