随机数的作用我就不说了,但凡要用随机数的童鞋一定是有这个需求。下面我们就分三个层次来介绍随机数生成。
文章目录
文章随时可能更新,请关注文章原出处:https://blog.csdn.net/haigear/article/details/136032962
一、利用rand函数生成随机数
rand函数是c++自带的函数,它的有点是不需要另外包涵其他的类就可以直接使用。但第一次使用它的同学可能会感到失望。
1、rand裸奔
第一次使用rand失望的同学一定是一上来就用一个rand来裸奔,这样每次运行的结果都一模一样,根本达不到随机的目的,如下面的程序:
#include <iostream>
using namespace std;
int main() {
cout<< rand();
return 0;
}
上面的程序得到的随机数都是一样,是因为我们没有设置一个变化的随机种子random seeds。
2、随机数种子srand-随机数生成器
是不是我们设置了随机种子就可以呢?看看下面的代码:
#include <iostream>
using namespace std;
int main() {
srand(1000); ///
cout<< rand();
return 0;
}
实际上,我们得到的结果还是一样,每次的随机数都一样。为什么呢?
srand()函数的作用是用以设置随机数生成器的种子。随机数生成器通常基于一个算法,根据一个种子值来生成伪随机数序列。如果不设置种子值,每次程序运行时生成的随机数序列都是相同的。
通过调用srand()函数并传入一个种子值,可以改变随机数生成器的种子,从而使得每次程序运行时生成的随机数序列都不同。通常情况下,可以使用当前时间作为种子值,以确保每次生成的随机数序列都是不同的。
3、如何得到不同的种子值
一般来说有几种办法,一种是利用系统时间戳作为种子值,或者自己在循环中传入不同的种子值,下面我们看看这两种典型的随机数生成代码:
(1)、利用系统时间戳time()函数
srand(time(0));
for(int i=0;i<=100;i++){
//TODO
// srand(100000*i);
cout<< rand()%20<<endl; //20以内的随机数
}
(2)、通过循环自己传入种子值
for(int i=0;i<=100;i++){
//TODO
srand(100000*i);
cout<< rand()%20<<endl;//20以内的随机数
}