场景算法
随机分红包
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元