暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

Java菜鸟 2019-05-19
882

问题:
设一个正整数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;
}

复制


文章转载自Java菜鸟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论