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

Math 范围内的rand()返回范围外的数字,math,Math,在我的程序中,我必须在特定条件下找到两个随机值: i需要是int范围[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 我怎样才能解决这个问题呢?正如评论所说,你的射程数学已关闭 您可能会发现,每次使用一个函数一致地计算出数学结果是很有用的。e、 g: int RandInRange(int x0, int x1)

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

i
需要是int范围
[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


我怎样才能解决这个问题呢?

正如评论所说,你的射程数学已关闭

您可能会发现,每次使用一个函数一致地计算出数学结果是很有用的。e、 g:

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

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

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

这是一个简单的数学
rand()%n+2
将为您提供
[0..n-1]+2=[2..n+1]
。我相信你能从这里成功。
rand()%N+A
会给你一个范围
[A,A+N[
,而不是
[A,N[
。例如,你想要的可能是
rand()%(N-2)+2
,这不是一个C甚至是编程问题,而是基础数学。我只是尽我的责任
i = min + (rand() % (int)(max - min + 1))