2011-03-15 52 views
0

如何添加在C++ 100和-100之間的隨機整數爲int變量?添加隨機整數在C++

+10

1.生成隨機intereger 2.添加整數 3. ???? 4.利潤 – sharptooth 2011-03-15 13:18:28

+5

使用'+'運算符。 – aib 2011-03-15 13:19:31

+0

我該如何做第1步,即生成一個隨機整數?明顯地添加它很容易。 – 2011-03-15 13:23:18

回答

1
int rnd = 0; 
rnd += ((rand() * 200)/RAND_MAX) - 100; 

編輯:顯然這將有問題,其中RAND_MAX等於INT_MAX。在這種情況下,答案如下:Adding random integer number in c++可能更合適。

編輯:在Windows平臺上RAND_MAX定義0x7FFF的,因此該計算將會成功。在其他平臺上,情況可能並非如此。

+1

'RAND_MAX'不能保證小於'INT_MAX'。事實上,在大多數系統中,事實並非如此。 – aaz 2011-03-15 13:45:34

+1

繼續@aaz評論:在我的gcc/linux上,「RAND_MAX == INT_MAX」。由於'rand()'返回一個'int',表達式'rand()* 200'的類型爲'int'。所以,上面的表達式中有界限:'([0.INT_MAX] * 200)/ INT_MAX - 100)'或'([INT_MIN.INT_MAX]/INT_MAX - 100)',或'(0 - 100)'。這個解決方案,在我的機器上,無論rand()的返回值如何,都會產生值「-100」。 – 2011-03-15 15:02:25

+1

當OP接受這樣嚴重錯誤的答案時,我的心就會痠痛。 – TonyK 2011-03-15 21:59:40

1

你可以這樣做:

生成0之間的隨機數爲100,與0之間的隨機數中減去100。

#include <cstdlib> 
#include <ctime> 
#include <iostream> 

using namespace std; 

int main() 
{ 
srand((unsigned)time(0)); 
int random_integer; 
random_integer = (rand()%101) - (rand()%101); 
cout << random_integer << endl; 
return 0; 
} 
+0

這將起作用,但應該指出的是,結果不會從統一分佈中得出。看看P(n = 100)= P(a = 100)* P(b = 0)= 1/101 * 1/101 = 1/10201,其中n是結果數,a和b是兩個數字繪製。另一方面,'P(n = 99)= P(a = 99)* P(b = 0)+ P(a = 100)* P(b = 1)= 2/10201'。這種趨勢一直持續到'P(n = 0)= 1/101',然後對稱'P(n = -99)= 2/10201'和'P(n = -100)= 1/10201'。 – DrBards 2012-12-19 03:43:06

6
value += (rand() % 201) - 100; // it's 201 becouse with 200 the value would be in [-100, 99] 

不要忘了初始化隨機值的種子(調用srand()),否則它將生成相同的值。初始化種子的好辦法是與時間:

srand(time(NULL)); 
0

在C++ 11:

#include <random> 

int main() 
{ 
    typedef std::mt19937_64 G; 
    G g; 
    typedef std::uniform_int_distribution<> D; 
    D d(-100, 100); 
    int x = 0; 
    x += d(g); 
} 

隨機性的其它來源也是可用的,例如:

minstd_rand0 
minstd_rand 
mt19937 
ranlux24_base 
ranlux48_base 
ranlux24 
ranlux48 
knuth_b 

剛更改typedef G以適應您的口味。如果你喜歡,你可以在施工時播種g