有人可以請我指出一個關於如何完成這個的好解釋嗎?由第二個數組中的值限定的隨機數組
例如,假設我有一個初始化爲值{3,4,5}的數組a [j]。我想用第一個數組中的值構建第二個數組,其填充的隨機數由0以下的數值限定。因此,b [i]將被初始化爲以下範圍內的隨機數:{0-3,0-4,0-5}
在C++中實現此目的的一種好方法是什麼?
有人可以請我指出一個關於如何完成這個的好解釋嗎?由第二個數組中的值限定的隨機數組
例如,假設我有一個初始化爲值{3,4,5}的數組a [j]。我想用第一個數組中的值構建第二個數組,其填充的隨機數由0以下的數值限定。因此,b [i]將被初始化爲以下範圍內的隨機數:{0-3,0-4,0-5}
在C++中實現此目的的一種好方法是什麼?
如果你的系統有arc4random(3)
和朋友(很可能如此),它真的很容易:
int a[3] = {3, 4, 5};
int b[3];
for (int i = 0; i < 3; i++)
{
b[i] = arc4random_uniform(a[i] + 1);
}
從手冊頁上面鏈接:
arc4random_uniform()
將返回一個32位值,均勻分佈但小於upper_bound。
C++中最常用的函數是函數rand(),它生成一個介於0和RAND_MAX之間的隨機數,它在cstdlib中定義。這就是爲什麼你需要使用模操作,在你的情況將是:
b[i] = rand() % (a[i]+1)
當心[模偏置(http://stackoverflow.com/questions/10984974/如果這對你的程序來說可能是一個問題,那麼爲什麼這樣做 - 人們說那裏是模 - 偏 - 什麼時候使用一個隨機數發生器)。 –
你是對的!我沒有想到這一點。 – Albondi