要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。
https://blog.csdn.net/hellokandy/article/details/90045187
上面其实产生的是伪随机数,如何产生真随机数:
int MY_Random1(int a, int b,int* r)
{
int k,l,m,i,p;
k=b-a+1; l=2;
while (l<k) l=l+l;
m=4*l; k=*r; i=1;
while (i<=1)
{
k=k+k+k+k+k;
k=k%m; l=k/4+a;
if (l<=b) { p=l; i=i+1;}
}
*r=k;
return p;
}
- 产生n个任意区间[a,b]内均匀分布的随机序列p[ ]
void MY_Random2(int a, int b, int* r, int p[], int n)
{
int k,l,m,i;
k=b-a+1; l=2;
while (l<k) l=l+l;
m=4*l; k=*r; i=0;
while (i<=n-1)
{
k=k+k+k+k+k;
k=k%m; l=k/4+a;
if (l<=b) { p[i]=l; i=i+1;}
}
*r=k;
}
|