在我的程序中,我必须找到两个具有特定条件的随机值:
i
需要是整数范围[2...n]
k
需要在范围内[i+2...n]
所以我这样做了:
i = rand() % n + 2;
k = rand() % n + (i+2);
但它一直给我错误的价值观,例如
对于n = 7
我得到i = 4
和k = 11
或i = 3
和k = 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);