如何创建一组非重复的兰特数

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

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

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

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

你可能想要使用像Fisher-Yates shuffle这样的东西。

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

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

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

在参考@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; } } }