2011-03-15 51 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