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

标签 java random

如何将一个大的正整数 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

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

相关文章:

java - 如何修复Spring-boot应用程序中的错误 'java.lang.NoClassDefFoundError: org/springframework/boot/bind/RelaxedPropertyResolver'?

java - 我在哪里可以找到实现 servlet 规范 12.1 和 12.2 的 JBoss 源代码?

javascript - 随机数不是很随机

python - 如何使 argsort 结果在相等值之间是随机的?

java - 当需要随机数时如何设置限制(1 或 2)?

java - 如何获取数组以打印用户输入、存储小计、乘以税收和总计

java - INRIX 流量监控如何工作?

java - 可能很简单,jet我无法让它工作(媒体播放器)

linux - 是否有随机数的系统调用?

c - 范围之间的随机奇数,C 中单个数字除外