这段代码如何改进以确保生成的随机数不重复?
时间: 2024-10-13 20:18:49 浏览: 28
如果想确保生成的随机数在特定范围内且不重复,一种简单的方法是在生成完整序列后再筛选出五位数。这里提供一种改进版的代码:
```cpp
#include <iostream>
#include <random>
#include <vector>
#include <set>
std::vector<int> generate_unique_random(int min, int max) {
std::default_random_engine generator(std::chrono::system_clock::now().time_since_epoch().count());
std::uniform_int_distribution<int> distribution(min, max);
std::vector<int> numbers;
while (numbers.size() < 5) { // 一直生成,直到有五个不重复的数
int random_num = distribution(generator);
if (std::find(numbers.begin(), numbers.end(), random_num) == numbers.end()) {
numbers.push_back(random_num);
}
}
return numbers;
}
int main() {
std::vector<int> unique_numbers = generate_unique_random(0, 99999); // 生成0-99999之间的五位数
for (const auto& num : unique_numbers) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
```
这段改进的代码首先定义一个均匀分布用于生成随机数,然后在一个循环中不断生成随机数并检查是否已存在于`numbers`向量中,如果不存在就添加。当`numbers`大小达到5时,跳出循环。
这样就可以确保生成的五个数字是不重复的,但可能会比直接生成固定长度的数组效率稍低,特别是对于大范围的情况。
阅读全文