不指定范围产生随机数
使用rand(),需要包含头文件cstdlib,代码如下:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;
return 0;
}
通过以上代码得到5个随机数,重复执行,结果不变。
产生0到n的随机数
通过取余来获得,例如获取0到19之间的随机数,注意,这里是[0,19),代码如下:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int n = 19;
cout<< rand()%19 << endl;
cout<< rand()%19 << endl;
cout<< rand()%19 << endl;
cout<< rand()%19 << endl;
cout<< rand()%19 << endl;
return 0;
}
重复执行,结果仍不变。
更改种子,重复执行代码获得不同的随机数
使用srand()函数更改种子,一般以时间作为参数,此时需包含头文件ctime。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(){
srand((int)time(NULL));
cout<<rand()<<endl;
cout<<rand()<<endl;
return 0;
}
使用srand()后重复执行会得到不同的随机数,但是如果手动快速执行两遍,仍会有相同的结果,目测是时间间隔过小导致。
获得指定范围的随机数(m,n),[m,n]等等
这种方法实际上是将上下限转换为第二种方法,再转回来。
获取(2,9]的随机数,转换为[3,10),即[0, 7)+3,代码如下:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(){
srand((int)time(NULL));
cout << rand()%7 + 3 <<endl;
return 0;
}
下面这几个公式是抄来的,需要的时候现推导也没问题:
srand((unsigned)time(null));
(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