如何创建一个非重复随机数的数组

时间:2012-02-23 15:38:05

标签: c

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

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

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

但我不知道如何创建这些数字,以便与之前的数字相比不会重复

4 个答案:

答案 0 :(得分:5)

您可能希望使用类似Fisher-Yates shuffle的内容。

答案 1 :(得分:2)

听起来你正在努力使它变得更加艰难。为什么不创建数字1-20的数组,然后通过随机随机化。

答案 2 :(得分:0)

您可以使用Set<Integer>添加rands直到大小为20,然后转储到数组。

如果您需要表演,请使用Guava的HashSet或Trove的TIntSet

答案 3 :(得分:0)

在参考@Oli的ans之后,我实际上正在创建值为0到20的二维数组。我写了我的回答:

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;
    }
  }
}