3

此代码应该生成 1 到 10 之间的随机数,但它每次都返回 1。

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;

代码有什么问题?

4

6 回答 6

9

如果你想要一个介于lowest和之间的随机整数highest,你最好写

random_integer = lowest + rand() % range
于 2012-09-25T10:18:16.510 回答
6

你会在这里溢出 - range*rand()

只需使用普通人使用的东西:rand() % 10 + 1.

于 2012-09-25T10:18:24.363 回答
5
range * rand() / (RAND_MAX + 1.0)

不按你的想法做。介绍一些括号:

range * (rand() / (RAND_MAX + 1.0))

(请注意,这种方法会产生偏态分布。)

于 2012-09-25T10:19:22.290 回答
2

我同意上面提供的所有解决方案。
现在要在每次运行程序时获得不同的序列,您可以使用srand()函数,它将为 rand()函数提供种子,如下所示:-

srand(time(NULL))  
random_integer = lowest + rand() % range 
于 2012-09-25T11:18:19.477 回答
0

这两个一直是我节目的一部分

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;
}
于 2012-09-25T13:25:54.393 回答
0

您似乎假设rand()返回一个介于 0 和 1 之间的值。

这是不正确的,它返回的值介于 0 和RAND_MAX.

于 2012-09-25T10:26:05.487 回答