C++随机数

C++随机数

#include <iostream>
#include <ctime>
#include <random>
#include <functional>
int main() {
    freopen("5.in", "w", stdout);
    std::default_random_engine generator(time(NULL));
    std::uniform_int_distribution<int> range(1, 1e6);
    auto dice = std::bind(range, generator);
    int n = dice(), m = dice();
    printf("%d %d\n", n, m);
    for (int i = 1; i <= m; ++i) {
    	int k = (dice()&1) + 1, a = dice()%(n-10)+1, b = dice()%(n-a)+a;
    	printf("%d %d %d\n", k, a, b);
	}
    return 0;
}
C++ 提供了多种生成随机数的方法,以下是一些常见的方法及使用示例: ### 使用 `rand()` 和 `srand()` 这是一种简单的伪随机数生成方法,需要包含 `<stdlib.h>` 或 `<cstdlib>` 头文件,同时通常会结合 `<time.h>` 来初始化随机数种子。 ```cpp #include <stdlib.h> #include <time.h> #include <iostream> int main() { srand(time(NULL)); // 初始化随机数生成器 int random_number = rand() % 100; // 生成 0 到 99 之间的随机数 std::cout << "Random number: " << random_number << std::endl; return 0; } ``` 这里 `srand(time(NULL))` 以当前时间作为随机数种子,使得每次运行程序时生成的随机数序列不同。`rand() % 100` 生成 0 到 99 之间的随机整数 [^3]。 ### 随机数生成的范围 - `[0, n)`:`rand() % n` - `[a, b)`:`rand() % (b - a) + a` - `[a, b]`:`rand() % (b - a + 1) + a` - `(a, b]`:`rand() % (b - a) + a + 1` - `[a, a + n)`:`a + rand() % n` - `[0 , 1)` 之间的浮点数:`rand()/(RAND_MAX * 1.f)` [^2]。 ### C++11 随机数生成 C++11 引入了更强大和灵活的随机数生成库,包含多种随机数生成算法和分布。以下是一个生成 0 到 9 之间随机整数的示例: ```cpp #include <iostream> #include <random> int main() { std::random_device rd; // 用于获取随机数种子 std::mt19937 gen(rd()); // 使用 Mersenne Twister 算法 std::uniform_int_distribution<> dis(0, 9); // 定义均匀分布 for (int i = 0; i < 5; ++i) { std::cout << dis(gen) << ' '; // 生成随机数 } std::cout << std::endl; return 0; } ``` 在这个示例中,`std::random_device` 用于获取随机数种子,`std::mt19937` 是一个常用的随机数生成器,`std::uniform_int_distribution` 定义了一个均匀整数分布 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值