随机数产生方法

不指定范围产生随机数


使用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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容