我的问题是我无法确定如何确保 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++;
}
}
}
最佳答案
您不应该在每次循环迭代中重新播种 PRNG。您应该在程序开始时执行一次。
一旦每秒多次调用 srand(time(NULL))
,就会产生重复的数字序列。这在您的代码中似乎不太可能。
供引用:
关于c - 我在生成随机数时遇到问题 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54117726/