将一个正整数num随机分成n份
最近游戏开发中遇到在门派里发红包的场景,发放门派资金,发的钱数和每个人抢到的钱数都是整数,参数flag决定抢到的是否可以为0
从网上找了找对应算法,找不到原文了,自己写了写以作保留
代码入下:
/**
* 将一个数num随机分成n份
* @param flag 是否可以为0
*/
public static int[] randomSplit(int num, int n, boolean flag) {
//随机抽取n-1个小于sum的数
List<Integer> list = new ArrayList();
//将0和sum加入到里list中
list.add(0);
//判断生成的正整数集合中是否允许为0,true元素可以为0 false元素不可以为0
if (!flag) {
num = num - n;
}
list.add(num);
int temp = 0;
for (int i = 0; i < n - 1 ; i++) {
temp = (int) (Math.random() * num);
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;
}