簡體   English   中英

我在生成隨機數(C)時遇到問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM