从大范围中生成一个随机数,除了大范围中间的较小范围

时间:2017-08-08 05:46:50

标签: c++ visual-c++ random

这行代码生成一个从-9到9的数字:

std::uniform_int_distribution<int> vDist(-9, 9);

但是,我想要做的是从-9到9生成一个数字,除了 -3到3.我不希望随机数生成器给我一个数字-3到3。

如何编写代码以排除此内部范围?

2 个答案:

答案 0 :(得分:2)

两种可能的解决方案:

  • 拒绝抽样
    检索随机数。如果介于-3和3之间,请再试一次 (do-while循环)
  • <强>映射
    以[-6,5]之类的较小间隔进行采样,并定义将此间隔映射到
    的1对1映射 [-9,-4] u [4,9]:

    if (value < 0) value -= 3;
    else value += 4; // if (value >= 0)
    

答案 1 :(得分:0)

我不是c ++,只是c#,但原则适用于所有语言。

你可以做一会儿循环,在每次迭代中生成一个新数字,并用if语句检查它,如果它大于-3且小于3。 如果是这样,继续使用while循环。

如果不是,它必须在你想要的范围内,你可以打破循环并存储你的价值。