簡體   English   中英

如何從rand()函數的范圍中省略一些數字?

[英]How to omit some numbers from rand() function's range?

我需要使用rand()函數來獲取1-15之間的數字,所以我只是使用下面的函數。

num1 = rand()%15+1;

但是在這個1-15范圍之間,有一些數字我想阻止被分配到num1變量。

我想在那里放一個if-else函數,因為rand()函數會在不希望的數字出現的情況下重復。

但是,我最好奇的是,是否有更有效的方法可以從rand()函數的范圍中省略這些不需要的數字。

非常感謝!

一個非常簡單的解決方案:調用rand() ,其模數值等於輸出范圍中數字的總數。 然后定義映射函數以將值映射到所需的特定輸出范圍。

例如:獲取1到5或11和15之間的隨機值,包括:

int map(int val)
{
    if (val > 5)
        return val+5;
    else
        return val;
}

int value = rand()%10+1;
value = map(value);

您希望擁有的聲音,例如集合{1,2,3,7,8,9,14,15}的隨機數(不是嗎)?

因此,對於此示例,這是8個不同值的計數,您可以這樣做:

lookupTable[] = { 1, 2, 3, 7, 8, 9, 14, 15 };
num1 = lookupTable[rand() % 8];

在這里放了一個運行的例子。

要獲得1到15之間的實數隨機數,您可以使用此類C ++ 11代碼:

#include <iostream>
#include <random>

int main()
{
        std::random_device rd;
        std::mt19937 mt(rd());
        std::uniform_int_distribution<int> dist(1, 15);

    for (int i = 0; i < 100; ++i)
        std::cout << dist(mt) << ", ";

}

要刪除這個號碼中的一些你可以使用map作為建議的owacoder你也看到視頻(來自編寫VS STL部分的MS家伙)關於如何獲得真正的隨機數,以及為什么rand不能用於此:

https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful

暫無
暫無

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

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