JAVA产生N个随机数和为S

匿名 (未验证) 提交于 2019-12-02 21:45:52
 import java.math.BigDecimal; import java.util.ArrayList; import java.util.List;  public class NumUtils {      private static final BigDecimal TWO = new BigDecimal(2);      public static BigDecimal getNumsBelowNum(BigDecimal num){         return num.multiply(new BigDecimal(Math.random())).setScale(2,BigDecimal.ROUND_DOWN);     }       public static List<BigDecimal> find(int n , BigDecimal s){         List<BigDecimal> res = new ArrayList<>();         BigDecimal amounts = BigDecimal.ZERO;         for(int i = 0;i<n-1 ; i++){             BigDecimal amount = getNumsBelowNum((s.subtract(amounts)).divide(TWO).setScale(2,BigDecimal.ROUND_DOWN));             res.add(amount);             amounts = amounts.add(amount);         }         res.add(s.subtract(amounts).setScale(2,BigDecimal.ROUND_UP));  //这里得是round_up要不会有1分的问题         return res;     }   //测试一下     public static void main(String[] args) {         while (true){             List list = find(10,BigDecimal.valueOf(30)); //10个数字,和为30             System.out.println(list);             BigDecimal a = BigDecimal.ZERO;             for (int i = 0; i<list.size();i++){                 a = a.add((BigDecimal)list.get(i));             }             System.out.println(a);             if(a.compareTo(BigDecimal.valueOf(30))!=0){                 System.out.println("---------有异常数据拉!!");             }         }      }  }

适用于砍价,一次性把砍价的全部算出来,放List

30元,需要10个人砍,就是上面这样了

文章来源: https://blog.csdn.net/hanling911/article/details/92640162
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!