生成一到十万的随机数的C++算法
时间: 2024-09-29 09:03:38 浏览: 21
在C++中,你可以使用标准库`<random>`来生成指定范围内的随机数。下面是一个简单的例子,展示了如何生成一到十万之间的随机整数:
```cpp
#include <iostream>
#include <random>
int main() {
// 设定随机数生成器的种子(这里通常设置为系统时间)
std::srand(std::time(0));
// 定义随机数的范围
const int min = 1;
const int max = 100000;
// 创建一个均匀分布的随机引擎
std::default_random_engine generator;
// 创建一个在给定范围内取值的随机数分布
std::uniform_int_distribution<int> distribution(min, max);
// 生成并打印随机数
for (int i = 0; i < 100000; ++i) { // 你可以改变这个循环次数以生成更多随机数
int random_num = distribution(generator);
std::cout << random_num << " ";
}
return 0;
}
```
这个程序会生成一系列从1到100000之间(包括1和100000)的随机整数。
相关问题
C++随机生成1到100随机数 真随机
在C++中,生成随机数通常使用`<random>`头文件中的函数和类。为了得到“真随机”数,通常需要依赖于硬件随机数生成器。但在大多数情况下,我们使用的是伪随机数生成器(Pseudo-Random Number Generators,PRNG),这些生成器通过算法产生看似随机的数列,但实际上每个数列都是可预测的。如果你需要“真随机”的数,可以使用如操作系统的随机数服务等。
下面是一个使用C++标准库中的伪随机数生成器(基于线性同余生成器的算法)生成1到100之间随机数的示例代码:
```cpp
#include <iostream>
#include <random>
#include <chrono>
int main() {
// 使用当前时间作为随机数生成器的种子
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine generator(seed);
// 定义1到100的范围
std::uniform_int_distribution<int> distribution(1, 100);
// 生成随机数
int random_number = distribution(generator);
std::cout << "随机数(1到100): " << random_number << std::endl;
return 0;
}
```
如果你需要使用“真随机”的数,你可以考虑使用如`/dev/random`或`/dev/urandom`在类Unix系统上的系统级随机数生成器,或者在Windows系统上使用`CryptGenRandom`等服务。但请注意,这些方法通常不适用于标准C++库中的函数,可能需要操作系统级别的调用。
c++如何生成一组不重复的随机数
在C++中,生成一组不重复的随机数可以采用几种方法,特别是在需要一定范围内的唯一整数时。这里我们可以结合`<random>`库和`<vector>`容器来实现:
```cpp
#include <iostream>
#include <random>
#include <vector>
int main() {
const int range = 10; // 随机数范围,例如0到9
std::vector<int> unique_random(range); // 容器用于存储不重复的随机数
// 使用Mersenne Twister算法生成器,它是一个高质量的伪随机数生成器
std::mt19937 generator(std::random_device{}()); // 根据系统时间初始化
std::uniform_int_distribution<> distribution(0, range - 1); // 统一分布,指定范围
// 生成并插入不重复的随机数
for (auto& num : unique_random) {
do {
num = distribution(generator);
} while (std::find(unique_random.begin(), unique_random.end(), num) != unique_random.end()); // 检查是否重复
}
// 打印结果
for (const auto& num : unique_random) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
```
在这个例子中,我们首先创建了一个固定大小的向量来保存随机数,并使用`std::mt19937`作为随机数生成器。然后,通过一个循环不断生成随机数并检查是否已存在于向量中,直到生成不重复的数字为止。