此代碼應該生成1到10之間的隨機數,但每次都返回1。使用C++的1到10之間的隨機數
int random_integer;
int lowest=1, highest=10;
int range=(highest-lowest)+1;
random_integer = lowest + int(range*rand()/(RAND_MAX + 1.0));
cout << random_integer << endl;
代碼有什麼問題?
此代碼應該生成1到10之間的隨機數,但每次都返回1。使用C++的1到10之間的隨機數
int random_integer;
int lowest=1, highest=10;
int range=(highest-lowest)+1;
random_integer = lowest + int(range*rand()/(RAND_MAX + 1.0));
cout << random_integer << endl;
代碼有什麼問題?
range * rand()/(RAND_MAX + 1.0)
不符合您的想法。介紹一些括號:
range * (rand()/(RAND_MAX + 1.0))
(請注意,此方法對skewed distributions,雖然)。
什麼是在1-10之間獲得未糾正分佈的最簡單方法。 – rajat
@rajat:http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx(或使用[C++ 11](http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution)或[ Boost](http://www.boost.org/doc/libs/1_51_0/doc/html/boost/random/uniform_int_distribution.html)庫) –
如果你想lowest
和highest
之間的隨機整數,你最好是寫
random_integer = lowest + rand() % range
您必須遵守這裏溢出 - range*rand()
。
只需使用普通人使用的東西:rand() % 10 + 1
。
您似乎認爲rand()
返回0和1
之間的值,這是不正確的,它返回值在0和RAND_MAX
之間。
我同意上面提供的所有解決方案。
現在得到一個不同的順序,每次你運行你的程序,你可以使用srand()函數功能將提供種子蘭特()功能如下: -
srand(time(NULL))
random_integer = lowest + rand() % range
這兩個是永遠我的程序的一部分
float randf(float lo, float hi) {
float random = ((float) rand())/(float) RAND_MAX;
float diff = hi - lo;
float r = random * diff;
return lo + r;
}
int randi(int lo, int hi)
{
int n = hi - lo + 1;
int i = rand() % n;
if (i < 0) i = -i;
return lo + i;
}
種子你的隨機生成器:srand((unsigned)time(0)); – Ram
C++ 11內置了更好的[PRNG功能](http://en.cppreference.com/w/cpp/numeric/random),包括[classes](http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution)來創建範圍內的數字。請參閱最後一個鏈接中的示例。 –