从数组中选择一个数字

时间:2010-06-23 13:26:02

标签: c++ c random

是否有任何函数或方法可以从数组中随机选择一个数字(或2个数字或更多)?

7 个答案:

答案 0 :(得分:9)

根据您需要的数量,数组的大小以及数组是否需要保持其顺序,您可以使用std::random_shuffle重新排序数组,然后从0..n-1循环得到n个随机数。当你想要获得相对于数组长度的大量数字时,这会更好。

如果这似乎不合适,您可以使用srand()rand() % n作为数组的索引,以获得随机选择的非常好的近似值。

答案 1 :(得分:3)

对于大小为n的数组,只需在0..n-1范围内生成一个随机数,然后选择数组中索引的数字。

答案 2 :(得分:2)

int RandomElement(int *array, int size)
{
   return array[ rand() % size ];     
}

如果您接受rand作为随机数生成器。

答案 3 :(得分:2)

randomElement = arr[rand() % ARRAY_SIZE];

这是最简单的方法。如果你想做一些更复杂的事情,你可以使用Boost.Random库,比如为数组的不同元素分配不同的概率。

答案 4 :(得分:1)

rand()%n通常几乎都是非随机的,至少对于遗留(坏)随机生成器(其中有很多,要小心)。

如果你负担得起转换,那么((双)rand()/ MAX_RAND)* n更好。或者使用随机生成器,其低位已知是随机的,并对较低的log n位进行拒绝。

答案 5 :(得分:1)

如果要从数组中选择两个随机数,而不重复使用相同的数字,则以下方法可以正常工作

int array[SIZE];

i = rand() % SIZE;
rand1 = array[i];
j = 1 + rand() % (SIZE - 2);
rand2 = array[(i + j) % SIZE];

答案 6 :(得分:1)

  #include<iostream>
  #include<cstdlib>

  template<typename T,size_t n>
  T randElem(T (&a)[n])
  {

        return a[rand() % n];
  }


  int main()
  {
      int a[]={1,2,3,4,5};

      int n=randElem<int>(a);
      std::cout<<n;
  }