随机数产生方法

不指定范围产生随机数


使用rand(),需要包含头文件cstdlib,代码如下:


#include 
#include 
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 
#include 
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 
#include 
#include 
using namespace std;
int main(){
    srand((int)time(NULL));
    cout<


使用srand()后重复执行会得到不同的随机数,但是如果手动快速执行两遍,仍会有相同的结果,目测是时间间隔过小导致。


获得指定范围的随机数(m,n),[m,n]等等


这种方法实际上是将上下限转换为第二种方法,再转回来。
获取(2,9]的随机数,转换为[3,10),即[0, 7)+3,代码如下:


#include 
#include 
#include 
using namespace std;
int main(){
    srand((int)time(NULL));
    cout << rand()%7 + 3 <


下面这几个公式是抄来的,需要的时候现推导也没问题:
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


你可能感兴趣的:(随机数产生方法)