问题:如何得到n个互相不重复的随机数?
用过Matlab的朋友,应该会见到过这样一个函数:randperm(n),用途是产生n个不重复的随机数。C和C++中也有用于产生随机数的rand()函数。那么,如何借助这个函数去实现randperm(n)的效果呢?本文提供三种常见思路,如下:
思路1:
创建一个动态数组,每次产生一个随机数,并判断该动态数组是否含有这一随机数。如果有,则跳过并重新产生下一个随机数;如果没有,则将产生的这一随机数加入动态数组。循环直到动态数组中元素数量达到n。
vector<int> random1(int number)
{
vector<int> result;
result.clear();
result.reserve(number);
srand((int)time(0));
while (result.size() < number)
{
int value = rand() % number;
bool flag = true;
for (size_t i = 0; i < result.size(); i++)
{
if (result.at(i) != number) continue;
else
{
flag = false;
break;
}
}