我的问题是我无法弄清楚如何确保rand函数不会将相同的数字赋予2个不同的单元格,如果这样做,我如何才能在不获得其他单元格中已经存在的数字的情况下进行更改。 if(arr [j]!= -1)是因为我还有其他函数用(-1)填充了某些单元格
这是我尝试执行此操作的一个版本(所有//都是来自不同尝试的残余物)
void fillArr(int arr[], int n)
{
int i,j=0;
for (i = 0; i < n; i++)
{
while (arr[j] == arr[j + 2] &&j + 2<n)
{
//srand(time(NULL));
if (arr[j] != -1)
{
if (j % 2 == 0)
{
arr[j] = rand() % (N - 1);
if (arr[j + 2] != -1)
arr[j + 2] = rand() % (N - 1);
//arr[i] = rand() % (N - 1)-rand()%(i-1);
srand(time(NULL));
}
else
{
arr[j] = rand() % (N - i);
arr[j + 2] = rand() % (N - 1);
//arr[i] = rand() % (N - 1) - rand() % (i +1);
//srand(time(NULL));
}
}
j++;
}
}
}
答案 0 :(得分:4)
您不应在每次循环迭代中重新种子PRNG。您应该在程序开始时执行一次。
每秒每秒有多个呼叫srand(time(NULL))
时,将产生重复的数字序列。在您的代码中似乎不太可能。
供参考:
答案 1 :(得分:1)
为什么随机数数组中不能有两个相等的数字?
无论如何,如果要防止出现这种情况,对于要在数组中添加的每个新值,请从头开始进行迭代,并检查该数字是否已在其中。如果是这样,请生成一个新数字并再次检查。
当然应该有足够的唯一数字适合数组(您可以在开始之前进行检查),理论上它可能要花很长时间,但实际上并不会发生。