c ++算法从一个范围中选择两个随机数,距离最小

时间:2017-06-06 14:10:51

标签: c++

我有一个用1到100之间的数字初始化的std :: vector

std::vector<int> vec;
for(int i = 1; i < 101; i++)
  vec.push_back(i);

我想选择两个距离最小的随机整数(例如最小距离可以是10)。

如果num1,num2是数字:

  

num2 - num1&gt;距离

我使用以下方法选择范围之间的随机整数:

int getRandomValue(int from, int to)
        {
                std::random_device seeder;
                std::mt19937 engine(seeder());
                std::uniform_int_distribution<int> dist(from, to);
                return dist(engine);
        }

如何生成num2和num1?

3 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

num1 = getRandomValue(minRange, maxRange - distance - 1);
num2 = getRandomValue(num1 + distance + 1, maxRange);

请注意,它不是对结果的均匀分布。

答案 1 :(得分:0)

你可以随机化每个例子的num1并总结距离,然后你有num2。

但你必须小心,因为num1必须低于或等于100距离

或oposite随机化num2从10到100和num1 = num2-distance

答案 2 :(得分:0)

#include <cstdlib>

a = rand() % 90;
b = a + 10;

a越小,b越大