场景算法

随机分红包

 

import java.math.BigDecimal;
import java.util.*;

public class Main {

    static void hb(double total, int num) {
        double min = 0.01;
        double one = Math.random() + total * (1 - 0.8);
        BigDecimal one_bd = new BigDecimal(one);
        one = one_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        total = total - one;
        BigDecimal total_bd = new BigDecimal(total);
        total = total_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        System.out.println("第1个红包:" + one + ",余额为:" + total + "");
        for (int i = 2; i < num; i++) {
            double free_avg = (total - (num - i) * min) / (num - i);  //让红包金额区间小些

            double money = Math.random() * (free_avg - min) + min;// [min,free_avg)

            BigDecimal money_bd = new BigDecimal(money);
            money = money_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            total = total - money;
            total_bd = new BigDecimal(total);
            total = total_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            System.out.println("" + i + "个红包:" + money + ",余额为:" + total + "");
        }
        System.out.println("" + num + "个红包:" + total + ",余额为:0元");
    }

    public static void main(String[] args) {

        hb(100, 10);// 金额,个数

    }
}

第1个红包:20.18,余额为:79.82元
第2个红包:2.75,余额为:77.07元
第3个红包:6.07,余额为:71.0元
第4个红包:9.37,余额为:61.63元
第5个红包:3.39,余额为:58.24元
第6个红包:8.17,余额为:50.07元
第7个红包:7.88,余额为:42.19元
第8个红包:19.76,余额为:22.43元
第9个红包:8.06,余额为:14.37元
第10个红包:14.37,余额为:0元

 

import java.math.BigDecimal;
import java.util.*;

public class Main {

    static void hb(double total, int num) {
        double min = 0.01;
        double one = Math.random() + total * (1 - 0.8);
        BigDecimal one_bd = new BigDecimal(one);
        one = one_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        total = total - one;
        BigDecimal total_bd = new BigDecimal(total);
        total = total_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        System.out.println("第1个红包:" + one + ",余额为:" + total + "");
        for (int i = 2; i < num; i++) {
            double free_total = (total - (num - i) * min);

            double money = Math.random() * (free_total - min) + min;// [min,free_avg)

            BigDecimal money_bd = new BigDecimal(money);
            money = money_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            total = total - money;
            total_bd = new BigDecimal(total);
            total = total_bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            System.out.println("" + i + "个红包:" + money + ",余额为:" + total + "");
        }
        System.out.println("" + num + "个红包:" + total + ",余额为:0元");
    }

    public static void main(String[] args) {

        hb(100, 10);// 金额,个数

    }
}

第1个红包:20.53,余额为:79.47元
第2个红包:55.75,余额为:23.72元
第3个红包:10.82,余额为:12.9元
第4个红包:7.05,余额为:5.85元
第5个红包:2.51,余额为:3.34元
第6个红包:0.11,余额为:3.23元
第7个红包:3.19,余额为:0.04元
第8个红包:0.01,余额为:0.03元
第9个红包:0.01,余额为:0.02元
第10个红包:0.02,余额为:0元

posted on 2022-03-29 15:21  cltt  阅读(39)  评论(0编辑  收藏  举报

导航