C++中产生随机数的方式有产生一个随机数和产生一系列不重复的随机数两种方式;
1. 产生单个随机数
- 通过
rand()
函数,需要先设置不同随机数种子,否则后面生成的每个随机数都一样,在此可以使用当前的时间作为种子。
#include <cstdlib>
#include <random>
srand((unsigned)time(NULL)); // 需要设置随机数种子,否则每次生成的随机数相同
int num = rand();
- 取一定范围内的随机数
要取得[a,b)
的随机整数,使用(rand() % (b-a))+ a
;
要取得[a,b]
的随机整数,使用(rand() % (b-a+1))+ a
;
要取得(a,b]
的随机整数,使用(rand() % (b-a))+ a + 1
;
2. 生成一个范围内的不重复的随机数
由于生成的随机数可能会出现重复的,所以如果需要生成的随机数是不重复的,可以换一种方式:
- 先生成一定范围内的顺序数值,这样可以保证数值各不相等
- 将该顺序数值打散,然后取前指定项,即可等同于取该范围内的不重复随机数
如取 0~10 之间的 6 各随机数:
// arr 中用来存放索引
vector<int> arr(11);
for(int i = 0; i < 11; i++)
{
arr[i] = i;
}
// 将数组的顺序打乱,然后取前面的 6 项,相当于在这个范围内取 6 个不重复的随机数
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(arr.begin(), arr.end(), g);
标签:std,rand,arr,重复,C++,随机数
From: https://www.cnblogs.com/Jeffxu/p/17884177.html