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



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

i需要是整数范围[2...n]

k需要在范围内[i+2...n]

所以我这样做了:

i = rand() % n + 2;
k = rand() % n + (i+2);

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

对于n = 7

我得到i = 4k = 11

i = 3k = 8

我该如何解决这个问题?

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

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

在这里寻找其他解释

正如评论所说,你的范围数学是关闭的。

您可能会发现每次都使用函数来一致地计算数学很有用。 例如:

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);

最新更新