c++ - 在具有特定均值的 2 个数字之间获取一组随机数。

标签 c++ c algorithm random

<分区>

问题:在具有特定平均值的两个值之间获取一组随机数。

假设我们得到 n 个介于 1 和 100 之间的随机数。我们的平均值为 25。

我的第一个方法是有 2 种模式,我们有 aboveMean 和 belowMean,其中第一个随机数是初始范围 1 和 100。每个后续数字都会检查总和。如果总和高于均值,我们转到 aboveMean 的情况,然后获得 1 到 25 之间的随机数。如果总和低于均值,我们执行 case belowMean 然后获得 26 到 100 之间的随机数。

除了粗略地获取随机数以将其添加到总数然后获取平均值之外,我还需要一些关于如何解决此问题的想法。如果它高于所讨论的均值,我们将得到一个低于均值的随机数,依此类推。虽然它确实有效,但似乎不是最好的方法。

我想我应该复习一下概率来处理这个随机数生成器。

最佳答案

让我们把范围分成左右两部分。使用与另一半的相对宽度相对应的频率的部分中的值。

int Leruce_rand(int min, int mean, int max) {
  int r = rand()%(max - min + 1);
  if (r < mean) {
    // find number in right half
    return rand()%(max - mean + 1) + mean;
  } else {
    // find number in left half
    return rand()%(mean - min) + min;
  }

假设 mean 是右半部分的一部分。这种快速解决方案可能存在小偏差。

给定 OP 的值,粗略地说,左半部分的平均值为 12.5,并且有 75% 的时间被调用。正确的平均数是 62.5,有 25% 的时间被调用:平均 25。


这种方法不同于 OP,后者“每个后续数字都将检查总和。如果总和高于平均值,我们将转到高于均值的情况,然后获得 1 到 25 之间的随机数。”因为这绝对可以防止出现一组高于或低于平均值的情况。使用 RNG,生成的值不应偏向于先前生成值的历史。

关于c++ - 在具有特定均值的 2 个数字之间获取一组随机数。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37623732/

相关文章:

c - 精炼拼写检查 C 程序

algorithm - 有没有办法从更大的矩阵中匹配子矩阵?

c++ - 为 double vector 创建排名

c - C中递归查找中间的数字

c++ - 为什么互斥锁与原子操作的不同之处在于前者是操作系统级别,后者是处理器级别?

c++ - Google 测试 C++ 检查流是否为空

能否请您说明为什么存储了变量值,但结构的大小仍然是 0 字节?

c - 为什么 %c 打印 '?',它的含义是什么

c++ - 您如何找到程序中最不优化的部分?

c++ - Directx C++ - 绘制 DNA 形状