簡體   English   中英

如何使隨機數(低於 50 毫秒)不會重復兩次

[英]How to make so Random Number (under 50 milliseconds) wont repeat twice

我正在制作腳本,它以毫秒為單位生成隨機數(范圍 20-100),假設它產生了延遲:30、40、42(全部 <(小於)50)

現在我想讓它第四次延遲不能再小於 50,我試過這個:

我嘗試使用 for 循環,但是當我使用此代碼腳本時,我的腳本根本不起作用/它不會切換或任何東西。

試想一下,您編寫了腳本,它生成了 20-100 的隨機數,並且您不希望 4 行延遲小於 50,您會怎么做? 謝謝。

        for (int i = 0; i < 4;)
        {

            // Total Delay aka delay1+delay2
            if (totaldelay < 50)
            {
                i++;
            }

            // Should make totaldelay > 50
            if (i == 3)
            {
                delay1 = RandomInt(75, 105);
            }

            // Reset to 0 so it checks from 0 again
            if (total > 50)
            {
                i = 0;
            }





        }

如果我正確理解了這個問題,您不希望四個連續的數字都小於 50。您可以通過簡單地保持計數並調整您的行為來實現這一點,以便在前三個都小於時生成不同的數字50.

如果您正在尋找一個獨立的 C++ function 來執行此操作(每次調用給您一個隨機數,並帶有您的特定附加限制),您可以使用類似的東西:

int getMyRand() {
    // Keep track of how many consecutive under-50s already done.
    // Careful in multi-threaded code, may need thread-local instead.

    static int consecUnder50 = 0;
    int number;

    // If last three were all < 50, force next one to be >= 50.

    if (consecUnder50 == 3) {
        number = rand() % 51 + 50;  // 50-100 (inclusive).
    } else {
        number = rand() % 81 + 20;  // 20-100 (inclusive).
    }

    // If less, record it, otherwise restart count.

    if (number < 50) {
        ++consecUnder50;
    } else {
        consecUnder50 = 0;
    }

    // Give caller the number.

    return number;
}

不要忘記在使用它之前為隨機數生成器播種,並注意 C++ 具有更好的隨機數生成器,盡管rand()通常很好,除非你是統計學家或密碼學家:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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