任何方式在2D阵列中生成随机数时保证特定数量的X量

时间:2015-11-16 03:28:50

标签: c++ c++11 random

我需要用随机数填充大小为n的二维数组,但我需要生成的随机数的n(n-1)/2 * .2.4.8-1我需要它们展开。有没有办法做到这一点?我一直在考虑填充数组时经常使它将该元素设置为-1并使用计数来跟踪但是无法确定那些-1是否在数组中分开,这有可能吗?

2 个答案:

答案 0 :(得分:2)

我能想到的最简单的方法是:

  • 使用所需的-1 s
  • 数量填写数组的开头
  • 用随机数填写数组的其余部分
  • 将数组洗牌,可能使用std::random_shuffle或类似的东西。

执行此操作后,您可以确定您拥有正确数量的-1,并且它们将随机分发。

答案 1 :(得分:0)

如果设置数组是一次性操作(即,您不会不断更改元素并期望-1值的比例保持不变(1) ),您可以先使用-1值填充数组,类似于(伪代码):

for index in 0 .. array.size():
    value = -1
    while value == -1:
        value = yourRandomFunctionIncludingNegOne()
    array[index] = value

然后,您只需在填充后将给定数量的它们更改为-1

for index in 0 .. array.size() / 5:  # 20%
    index = random(array.size())
    do:
        index = random(array.size())
    while array[index] == -1
    array[index] = -1

(1)如果数组不断变化,你仍然可以使用这个方法,你只需要跟踪negative-one和{{1计算和动态调整。它有点复杂但仍然可行。