C 如何创建非重复随机数数组

C 如何创建非重复随机数数组,c,C,我想创建一个数组,它有21个介于0到20之间的值。我希望它们是随机的,同时不重复 我知道如何创建0到20之间的随机数 0 + rand()/(RAND_MAX/(20-0+1)+1) 但是我不知道如何创建这些数字,这样与以前的数字相比,它就不会重复了。你可能想使用类似的东西。听起来你让它变得不必要了。为什么不创建一个数字1-20的数组,然后通过随机洗牌将其随机化。您可以使用集合添加随机数,直到大小为20,然后转储到数组中 如果您需要性能,请使用Guava的HashSet或Trove的TIntS

我想创建一个数组,它有21个介于0到20之间的值。我希望它们是随机的,同时不重复

我知道如何创建0到20之间的随机数

0 + rand()/(RAND_MAX/(20-0+1)+1)

但是我不知道如何创建这些数字,这样与以前的数字相比,它就不会重复了。

你可能想使用类似的东西。

听起来你让它变得不必要了。为什么不创建一个数字1-20的数组,然后通过随机洗牌将其随机化。

您可以使用
集合添加随机数,直到大小为20,然后转储到数组中


如果您需要性能,请使用Guava的
HashSet
或Trove的
TIntSet

我实际上是在创建值介于0到20之间的二维数组。参考@Oli的ans后,我写下了我的答案:

int arr[2][6] = {{0,1,2,3,4,5,6}, {7,8,9,10,11,12,13},{14,15,16,17,18,19,20}};
void rearrange_num(int *p)
{
  int temp = 0;
  for(int i = numRows -1 ; i > 0 ; i--)
  {
    for (int j = numCols-1;j>0; j--)
    {
          k = 0 + rand()/(RAND_MAX/(2-0+1)+1);
          l= 0 + rand()/(RAND_MAX/(6-0+1)+1);
          temp = p[i][j]; 
          p[i][j] = p[k][l];
          p[k][l] = temp;
    }
  }
}

提示:创建一个序列值为0到20的数组,然后将其洗牌,这将保证每个元素的唯一性。