美文网首页
随机数产生方法

随机数产生方法

作者: jianshu可以吗 | 来源:发表于2016-08-28 22:26 被阅读0次

不指定范围产生随机数

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

相关文章

网友评论

      本文标题:随机数产生方法

      本文链接:https://www.haomeiwen.com/subject/skhxettx.html