面试真题设计一个抢红包算法,单个红包最大不能超过总金额的90%

Posted Cry丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试真题设计一个抢红包算法,单个红包最大不能超过总金额的90%相关的知识,希望对你有一定的参考价值。

题干:

总金额 double total = 100D;    
总人数 int num = 10;
返回一个List<Double>

参考代码:

public class RedWars 

    public static List<Double> list = new ArrayList<>(10);
    public static double remain;
    public static double used;

    public static List<Double> solution(double total, int num) 
        if (num < 2) 
            list.add(remain);
            return list;
        
        Random random = new Random();
        double bound = random.nextInt(91) / 100.0;
        remain = total;
        used = remain * bound;
        BigDecimal b0 = new BigDecimal(used);
        used = b0.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        Math.round(used);
        list.add(used);
        remain = remain - used;
        BigDecimal b1 = new BigDecimal(remain);
        remain = b1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return solution(remain, --num);

    

    public static void main(String[] args) 
        double total = 100;
        int num = 10;
        List<Double> solution = solution(total, num);
        System.out.println(solution);
    



输出:

[33.0, 43.55, 7.03, 13.96, 1.21, 0.98, 0.02, 0.18, 0.0, 0.07]

以上是关于面试真题设计一个抢红包算法,单个红包最大不能超过总金额的90%的主要内容,如果未能解决你的问题,请参考以下文章

高并发红包整体设计方案

笔试题--红包算法,给定一个红包总金额和分红包的人数,输出每个人随机抢到的红包数量。

揭秘微信红包:架构抢红包算法高并发和降级方案

揭秘微信红包:架构抢红包算法高并发和降级方案(转载)

抢红包算法

C#实现抢红包算法