gpt4 book ai didi

java - 将一个数均匀随机分成m份

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:57 27 4
gpt4 key购买 nike

如何将一个大的正整数 n 分成 m 个部分均匀随机。后置条件:将所有 m 部分加起来应该得到 n

下面是我的尝试(在类似伪代码的 Java 中),但我认为它不会给我均匀的随机分布。我首先通过除以 n/m 找到平均部分 avg。然后我生成 m-1 随机数,其大小在 avg 左右(通过在 0 & avg 和 *avg & 2*avg* 之间交替生成随机数。然后我从原始数字 n 中减去这些 m-1 数字的总和,并将其设置为第 m 部分。

假设函数 rand(x, y) 返回一个在 x 和 y 之间均匀分布的随机数。

int[] divideUniformlyRandomly(int n, int m)
{
int[] res = new int[m];
int avg = n / m;
int sum = 0;
bool alternator = false;
for(int i = 0; i < m - 1; i++)
{
if(alternator == false)
{
res[i] = rand(0, avg);
alternator = true;
}
else
{
res[i] = rand(avg, 2*avg);
alternator = false;
}
sum += res[i];
}
res[m-1] = n - sum;
return res;
}

最佳答案



public double[] divideUniformlyRandomly(double number, int part) {
双 uniformRandoms[] = new double[部分];
随机 random = new Random();

双均值 = 数量/部分;
双和 = 0.0;

对于 (int i=0; i uniformRandoms[i] = random.nextDouble() * 均值;

uniformRandoms[part - i - 1] = mean + random.nextDouble() * mean;

sum += uniformRandoms[i] + uniformRandoms[part - i -1];
}
uniformRandoms[(int)Math.ceil(part/2)] = uniformRandoms[(int)Math.ceil(part/2)] + number - 总和;

返回统一随机数;
}

关于java - 将一个数均匀随机分成m份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9891457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com