rand()
-
生成一个0~RAND_MAX的随机数
RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。
#include <iostream>
using namespace std;
int main()
{
cout<<rand()<<endl;
return 0;
}
运行结果:
16807
[Finished in 0.3s]
该函数原型为 int rand() , 无参数,产生一个范围在0到RAND_MAX之间的数,通过取余可以获得指定范围的随机数。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)
-
生成一个0~x的随机数
#include <iostream>
using namespace std;
int random(int x){
return rand()%x;
}
int main()
{
for(int i=0;i<10; i++){
cout<<" "<<random(10);
}
cout<<endl;
return 0;
}
运行结果:
7 9 3 8 0 2 4 8 3 9
[Finished in 0.3s]
-
生成一个m~n的随机数
#include <iostream>
using namespace std;
int random(int m, int n){
if(m>n){
return rand()%(m-n+1)+n;
}
else if(m==n){
return m;
}
else{
return rand()%(n-m+1) + m;
}
}
int main()
{
for(int i=0;i<10; i++){
cout<<" "<<random(5,15);
}
cout<<endl;
return 0;
}
运行结果:
15 6 5 11 13 8 7 5 14 9
[Finished in 0.3s]
以上的代码生成的随机数范围是[m, n],通过不同的设定,随机数可以是[m, n)或是(m, n],或是(m, n)。
(a,b) (rand()%(b-a+1))+a-1 [a,b) (rand()%(b-a))+a (a,b] (rand()%(b-a))+a+1 [a,b] (rand()%(b-a+1))+a
注意,以上三个程序每次执行产生的结果是相同的,即是个伪随机数。rand()产生随机数与具体的种子有关,当不用srand()获取种子时,种子的默认值为1,因此需要用srand()函数产生不同的种子,种子的值可以人为设定。若是为了产生不同的种子值,通常用时间作为参数值。
srand()
srand()函数原型:void srand(unsigned seed)
#include <iostream>
using namespace std;
int main()
{
cout<<rand()<<endl;//default = 1, which is the same with below
srand(1);
cout<<rand()<<endl;
srand(23);
cout<<rand()<<endl;
srand((int)time(NULL));
cout<<rand()<<endl;
cout<<rand()/double(RAND_MAX)<<endl;
return 0;
}
运行结果:
16807
16807
386561
679799174
0.359358
[Finished in 0.3s]