C++:生成随机数
很多情况下都系要生成随机数,而系统提供了一种生成随机数的方式,但是生成的随机数是伪随机数,即生成的随机数是固定的,每次都会重复,这是由于系统随机数srand()内参数默认是1,也就是在不改变其值的情况下会产生同样的随机数。
srand()是随机数发生器的初始化函数,原型函数是srand(unsiged int seed)
通过改变seed的值来为系统提供种子值。
常用的srand((unsiged)time(NULL))就是根据计时器来改变种子的值
time(NULL)是一套已经预先定义好的算法计算出的随机数,会随着时间的变化而变化
使用time(0)亦可以
如果不设定srand(time(0))或者是srand(time(NULL)),仅仅通过代码:
int radom_data = rand()%30;
仅会产生30以内的随机数,况且每次执行后产生的随机数都是一样的.
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
/*
srand()是随机数发生器的初始化函数,原型函数是srand(unsiged int seed)
通过改变seed的值来为系统提供种子值。
常用的srand((unsiged)time(NULL))就是根据计时器来改变种子的值
time(NULL)是一套已经预先定义好的算法计算出的随机数,会随着时间的变化而变化
使用time(0)亦可以
*/
//srand(time(NULL));
srand(time(0)); //通过系统的计时器来改变系统的种子值
cout << "生成100以内的随机数" << endl;
for (int i = 0; i < 4; i++)
{
int random_number = rand() % 100;
cout << random_number << " ";
}
cout << endl;
cout << "-------------------------------" << endl;
srand(time(NULL));
cout << "生成40--50之间的随机数" << endl;
for (int i = 0; i < 10; i++)
{
int random_number = 40+rand() %(50-40+1);
cout << random_number << " ";
}
return 0;
}
运行两次代码之后如下:
显然两次执行生成的随机数是不重复的。