有c++写随机生成数组的,数组大小可为百万级,内部随机生成数字,数字不能有重复,数字的最大值与数组的大小一样
时间: 2023-11-17 17:06:34 浏览: 39
可以使用C++的标准库中的`random_shuffle`函数来实现。具体步骤如下:
1. 定义一个长度为n的数组a。
2. 将数组a初始化为0~n-1的连续整数。
3. 使用`random_device`或`time`函数生成一个随机种子,然后将种子作为参数传递给`mt19937`引擎来生成随机数。
4. 使用`shuffle`函数对数组a进行随机重排。
5. 将a中的数字作为下标,生成一个新的数组b,其中b[i]表示数字i是否在a中出现过。如果b[i]=1,则说明数字i已经在a中出现过,需要重新生成一个随机数。
6. 最后,将a中的数字复制到另一个数组中,即可得到一个不含重复数字的随机数组。
下面是实现代码:
```c++
#include <iostream>
#include <algorithm>
#include <random>
using namespace std;
int main()
{
const int n = 1000000;
int a[n], b[n] = {0};
// 初始化数组
for (int i = 0; i < n; i++)
a[i] = i;
// 随机种子
random_device rd;
mt19937 gen(rd());
// 随机重排
shuffle(a, a + n, gen);
// 判断数字是否重复
for (int i = 0; i < n; i++) {
if (b[a[i]] == 1) {
int j = uniform_int_distribution<int>(0, n-1)(gen);
while (b[j] == 1)
j = uniform_int_distribution<int>(0, n-1)(gen);
a[i] = j;
}
b[a[i]] = 1;
}
// 输出结果
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
```
该代码首先初始化一个长度为n的数组a,然后使用`shuffle`函数对其进行随机重排。接着,使用一个新的数组b来记录数字是否出现过,如果出现过就重新生成一个随机数。最后,输出结果即可。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)