Java实现将一个正整数随机拆分为任意份

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_43215250/article/details/90238985

问题:
设一个正整数sum,需将其随机分为n个数之和为sum。

解决思路:

  1. 先随机抽取n-1个小于sum的数组成数组,并在数组头部加0,尾部加sum;
  2. 将数组进行升序排序;
  3. 每两个相邻元素数之间的差即可得到相加为sum的n个数的数组。
    public static int[] splitInteger(int n, int sum,boolean flag) {
        //随机抽取n-1个小于sum的数
        List<Integer> list = new ArrayList();
        //将0和sum加入到里list中
        list.add(0);
        //判断生成的正整数集合中是否允许为0,true元素可以为0  false元素不可以为0
        if (!flag) {
            sum = sum - n;
        }
        list.add(sum);
        int temp = 0;
        for (int i = 0; i < n - 1 ; i++) {
            temp = (int) (Math.random() * sum);
            list.add(temp);
        }
        Collections.sort(list);
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = list.get(i + 1) - list.get(i);
            if (!flag) {
                nums[i] += 1;
            }
        }
        return nums;
    }

猜你喜欢

转载自blog.csdn.net/weixin_43215250/article/details/90238985