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