“随机”;“拆分”;Java中整数值的定义
有趣的问题,希望有人知道如何在Java中做到这一点。我有 一个固定的整数值x,我想用一个整数x1,x2,…,xn的和来表示 使以下各项适用:“随机”;“拆分”;Java中整数值的定义,java,random,Java,Random,有趣的问题,希望有人知道如何在Java中做到这一点。我有 一个固定的整数值x,我想用一个整数x1,x2,…,xn的和来表示 使以下各项适用: x = x1 + x2 + ... + xn; 例如,假设n=3,x=10 10 = 5 + 3 + 2; 问题是,x1,x2。。。xn共享应该是均匀分布的,每次我想要将x值“分割”到不同的共享中,它们应该是不同的 有人知道怎么做吗 谢谢, Patrick未经测试,也可能效率不高,但应能工作: public static int[] sumNumber
x = x1 + x2 + ... + xn;
例如,假设n=3,x=10
10 = 5 + 3 + 2;
问题是,x1,x2。。。xn共享应该是均匀分布的,每次我想要将x值“分割”到不同的共享中,它们应该是不同的
有人知道怎么做吗
谢谢,
Patrick未经测试,也可能效率不高,但应能工作:
public static int[] sumNumbers(int number, int parts) {
int[] result = new int[parts];
int sum = 0;
Random random = new Random();
for (int i = 1; i < result.length; i++) {
// here is the uneffecient part:
int rand = random.nextInt(number);
if (sum + rand < number) {
result[i] = rand;
sum += rand;
} else {
i--;
}
}
result[0] = number - sum;
return result;
}
publicstaticint[]sumNumbers(int-number,int-parts){
int[]结果=新的int[部分];
整数和=0;
随机=新随机();
for(int i=1;i
这可能是无效的,因为您可能有以下情况:
你把100分成25个数字。假设随机选择的前5个数加起来接近100,那么你必须等待20个数中的其余数随机变小。这是可行的,我们的想法是采用最大上限为x-(n-i)的随机数,即第一个元素必须上限为8,以避免下一个数变为零。我假设需要正数,其和为x
Random random = new Random(System.currentTimeMillis());
for (int i = 0; i < n -1; i++) {
int j = random.nextInt(x - (n -i)) + 1;
System.out.println(j);
x -= j;
}
System.out.println(x);
Random Random=new Random(System.currentTimeMillis());
对于(int i=0;i
我做了类似的事情:
int remainder = 0;
int n = 3;
int max = 2000;
for(int i = 1; i <= n; i++)
{
int ct = 0;
if(i < n)
ct = ThreadLocalRandom.current().nextInt(0, (max - remainder));
else
ct = max - remainder;
System.out.println("Value " + i + " :" + ct);
remainder += contCt;
}
int余数=0;
int n=3;
int max=2000;
对于(int i=1;i)你所说的“均匀分布”是什么意思?你是说如果可能的话,x1!=x2!=x3…!=xn?你的方程很混乱,x1+x2表示x*1和x*2,但你把它们等同于x。分裂的均匀性是什么?10=25+75+(-90)< /代码>也是可能的吗?通过不规则分布,我的意思是,在0和x之间的范围内,任何值席的可能性都应该等于表示“X”的值中的“共享”,该值构成了该代码的值,它不会按照要求产生不同的分裂值。循环。你说的不同的分割值是什么意思?我想n
和x
是给定的?我已经说过,它可能会运行很长时间。如果一个参数是非法的?或者你的rand每次都是0呢?然后结果[0]包含数字本身?当然,他必须检查参数。现在我知道你使用不同的分割值是什么意思了。如果没有相同的分割值,或者数字本身和尾随的0,他如何将2分割成2个数字?我认为OP需要唯一的数字,所以加数不能出现两次。如果random.nextInt(n)
返回n-1
。所有下一个生成的j
值将是1
。