[英]I have a problem generating random numbers (C)
我的問題是我無法弄清楚如何確保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))
將產生重復的數字序列。 在您的代碼中這似乎不太可能。
以供參考:
為什么在隨機數數組中不能有兩個相等的數字?
無論如何,如果要防止它,對於要在數組中添加的每個新值,請從頭開始進行迭代,並檢查該數字是否已在其中。如果是這樣,請生成一個新數字並再次檢查。
當然,應該有足夠的唯一數字適合數組(可以在開始之前進行檢查),並且理論上它可能會永遠花費,但是實際上這不會發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.