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

尝试写一个抢红包算法

作者: 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;
    }

相关文章

  • 尝试写一个抢红包算法

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

  • 抢红包基本算法尝试

    在生活中,抢红包无处不在,既为我们带来金钱的流通,也为我们带来惊喜;但其背后的算法严密而复杂,既要保证公平,又要充...

  • js模拟微信抢红包算法的讨论

    春节在家无聊,抢红包的时候想起来,不如自己写一个微信抢红包算法来练练手。本以为是非常简单的一个事情,但真正写下来也...

  • 抢红包算法

    抢红包大家都知道,但发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 所有人抢到金额之和等于红包金额,不...

  • 抢红包算法

    今天分享一篇有趣的抢红包算法,基本原理就是“二倍均值”,简单说,也就是一个公式,在这里,令P为人数,M为红包总金额...

  • Golang洗牌算法,抢红包算法

    本文为转载,原文:Golang洗牌算法,抢红包算法 1. 洗牌算法 洗牌算法,即将原来的顺序打乱,组成新的随机排序...

  • 抢红包算法@随机算法

    生成随机数 注:randomElement() 如果 range 是空,返回 nil 数组随机 洗牌算法 Swif...

  • 排序算法详解与python实现

    Note:写后感:理解算法思想很重要!理解算法思想很重要!理解算法思想很重要!之后尝试自己独立码代码对算法的理解更...

  • 实现抢红包算法

    发出一个固定金额的红包,由若干人来抢,需要满足哪些规则? 1.所有人抢到金额之和等于红包金额,不能超过,也不能少于...

  • iOS 实现删除链表中的倒数第 k 个节点

    之前写算法都是用 Java 实现,现在尝试用 Objective-C 来实现以下这个算法,首先定义链表节点如下 可...

网友评论

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

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