我想创建一个21到0到20之间的数组。我希望它们是随机的,同时不重复。
我知道如何创建0到20之间的随机数。
0 + rand()/(RAND_MAX/(20-0+1)+1)
但我不知道如何创建这些数字,以便与之前的数字相比不会重复
答案 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;
}
}
}