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