范围内的rand()返回范围之外的数字

时间:2017-05-25 19:10:38

标签: math

在我的程序中,我必须找到具有特定条件的两个随机值:

[2...n]必须是int范围k

[i+2...n]需要在i = rand() % n + 2; k = rand() % n + (i+2);

范围内

所以我这样做了:

n = 7

但它一直给我错误的价值,比如

代表i = 4

我得到k = 11i = 3

k = 8n = 553.98896 int(n)+float(str(n-int(n))[1:4])

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我在其他程序中使用的确切公式是:

i = min + (rand() % (int)(max - min + 1))

Look here for other explanation

答案 1 :(得分:1)

正如评论所说,您的范围数学已关闭。

您可能会发现每次使用函数来一致地处理数学是很有用的。 e.g:

int RandInRange(int x0, int x1)
{
    if(x1<=x0) return x0;
    return rand() % (x1-x0+1) + x0;
}

然后用你想要的东西来调用它:

i = RandInRange(2,n);
k = RandInRange(i+2,n);