zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C++中的随机数使用实例

C++实例 随机数 使用
2023-09-27 14:25:48 时间

1. 使用rand生成随机数,不过生成的是伪随机数(运行时每次生成的随机数都是一样的)

int a = rand();
cout << "random a = " << a << endl;

2. 在使用rand之前使用srand设置随机种子,这样生成的随机数才是真正的随机数,使用srand设置随机种子要让里面的参数随时变换,所以通过获取系统时间作为其参数(这样保证每个时间种子都是变化的,否则生成的随机数还是相同的),如下生成10个随机数:

srand((unsigned)time(NULL)); //系统时间做随机种子
for (int i = 0; i < 10; i++)
{
	int j = rand();
	cout << "随机数: " << j << endl;
}

生成0~10之间的随机数,可以对10去余 

int j = rand() % 10;

 生成指定范围内的随机数,比如[5,15]之间的随机数

srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++)
{
	int a = rand() % (15 - 5 + 1) + 5; //生成随机数范围[5, 15]
	cout << "随机数:" << a << endl;
}

 

公式:

C++11中的random类

random类是C++11中增加的类,该类可以用于生成随机数,具有C语言中rand生成伪随机数的功能,但其功能更强大。原生支持生成浮点数,及分布类。

随机数发生器主要由分布对象和随机数引擎对象组成。其中随机数引擎用于根据随机数种子来产生随机数,分布对象对产生的随机数根据需求进行分布。
random中定义了多种随机数引擎及分布类型,常用的引擎是默认伪随机数引擎类default_random_engine,常用的分布类有产生整型分布的uniform_int_distribution,产生浮点型的分布uniform_real_distribution

//该函数接受三个参数分别指定随机数范围和种子,返回double
double random_unint(unsigned int min, unsigned int max, unsigned int seed = 0)
{
	static std::default_random_engine e(seed);
	static std::uniform_real_distribution<double> u(min, max);
	return u(e);
}

void main()
{
	for (int i = 0; i < 15; ++i)
	{
		std::cout << random_unint(0, 15, time(NULL)) << endl;
	}
	system("pause");
}