利用java程序把一个整数拆分成n份,并且可以控制被拆分数字的相差范围(例如:相差在200之内)?

利用java程序把一个整数拆分成n份,并且可以控制被拆分数字的相差范围(例如:相差在200之内)?

拆分成n份,是范围段,还是n份之和。

调试通过,望采纳

    public static void main(String[] args) {
        execute(501,502,200);
    }

    /**
     * 拆分
     * @param num 拆分的整数
     * @param n 拆分的份分数
     * @param difValue 每份之间相差最大值
     */
    public static void execute(Integer num, Integer n, Integer difValue) {

        if (n.equals(1)) {
            System.out.println(num);
            return ;
        }

        if (num / n < 1 || difValue < 0) {
            System.out.println("无法拆分");
            return ;
        }

        Integer average = num / n;

        if (difValue.equals(0) && !num.equals(average * n)) {
            System.out.println("无法拆分");
            return ;
        }

        // 可以平均拆分
        List<Integer> list = new ArrayList<>();
        if (num.equals(average * n)) {
            for (int i = 0; i < n; i++) {
                list.add(average);
            }
            System.out.println(JSON.toJSONString(list));
            return ;
        }

        // 不能平均拆分
        Integer difference = num - (average * n);
        if (difference / n > difValue) {
            System.out.println("无法拆分");
            return ;
        }
        // 选其中一种拆分方法
        for (int i = 0; i < n; i++) {

            if (difference > 0) {
                if (difference < difValue) {
                    list.add(average + difference);
                } else {
                    list.add(average + difValue);
                }
            } else {
                list.add(average);
            }
            difference -= difValue;
        }
        // 输出
        System.out.println(JSON.toJSONString(list));
    }

每次运行之后生成的一组数字要不一样。
比如把10000分成5份,相差范围在100之内
第一次运行:分配的数据列表:[1902.76, 2005.51, 2094.32, 2077.26, 1920.15]。
第二次运行:[2000.34, 1901.03, 2085.26, 2011.76, 2001.61]

快下班摸鱼随手写的

object test {
  def main(args: Array[String]): Unit = {
    for ( x <- getNum(100,5)) println(x)
  }
  def getNum(num:Int,n:Int): Array[Int] ={
    val arrayBuffer = new ArrayBuffer[Int]()
    var tmp = 0
    var next = num
    var now = 0
    for (x <- 1 until n){
      tmp = scala.util.Random.nextInt(next)
      arrayBuffer.append(tmp)
      next -= tmp
      now += tmp
    }
    arrayBuffer.append(num - now)
    arrayBuffer.toArray
  }
}