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