C++11 随机数生成器
背景
考试想造浮点数然后发现不会
正好下午被虎哥茶话会
谈到了一些不会的问题balabala的
被告知\(C++11\)有些神奇特性(哦豁)
然后就学习了一手看上去没什么用的随机数生成器\(QwQ\)
random_device
标准库提供了一个非确定性随机数生成设备
在\(Linux\)的实现中,是读取\(/dev/urandom\)设备
random_device提供()操作符,用来返回一个min()到max()之间的一个数字
如果是\(Linux(Unix Like或者Unix)\)下,都可以使用这个来产生高质量的随机数,可以理解为真随机数
(以上都是废话,其实和最原始的c++的rand()用法一样,不过真随机数好评)
#include <iostream>
#include <random>
using namespace std;
signed main(){
random_device rand;
cout << rand() << endl;
return 0;
}
default_random_engine
一个随机化的前置引擎
给后面要用到的函数生成一个随机节点(时间戳balabala随便理解一下就好,并没有什么卵用,就是让后面的函数随机化更强)
和上面提到的\(random_device\)不同的是,这个需要提供时间种子,看上去和rand也没什么区别。。。
#include <iostream>
#include <random>
using namespace std;
signed main(){
default_random_engine rand(time(NULL));
cout << rand() << endl;
return 0;
}
uniform_int_distribution
好了干货来了
该函数的作用是生成一个[a,b]范围内的整数
定义的时候传进去相应的参数(数据范围即可)
uniform_int_distribution<int> rand1(-100, 100);
调用的时候给时间种子(就是上面device写的rand函数)
cout << rand1(rand) << " ";
uniform_real_distribution
最有用的东西还是这个实数域的随机生成器
用法和上述int一样
uniform_real_distribution<double> rand2(0.0, 1.0);
cout << rand2(rand) << endl;
正态分布normal_distribution
再来说一个常用的
正态分布
正态分布\(N(μ,σ^2)\)呈现经典的”钟形曲线”的形状,其中中心峰的\(x\)坐标由\(μ\)给出,峰的宽度受\(σ\)控制。
正态分布由两个参数控制,\(μ∈R\)和\(σ∈(0,∞)\)
分布的标准差用\(σ\)表示,方差用\(σ^2\)表示
使用方法,第一个参数是\(μ\),第二个是\(σ\)
normal_distribution<double> N(10.0, 5.0);
为了方便直观的看出数据分布,把每次生成的数据出现次数+1,测试的时候输出了数据分布图像
for(register int i = 0; i < 10000; i++){
double num = nor(rand);
if ((num >= 0.0) && (num < 20.0)) ++p[int(num)];
}
for (int i = 0; i < 20; ++i) {
cout << i << "-" << (i + 1) << ": ";
cout << string(p[i] * 100 / 10000, '*') << endl;
}

具体要求按照具体题目要求,修改参数即可
Code
最后把代码粘贴一下,有需要自取就好
#include <iostream>
#include <random>
using namespace std;
int p[1000];
signed main(){
default_random_engine rand(time(NULL));
uniform_int_distribution<int> rand1(-100, 100);
uniform_real_distribution<double> rand2(0.0, 1.0);
cout << rand() << " ";
cout << rand1(rand) << " ";
cout << rand2(rand) << endl;
normal_distribution<double> nor(10.0, 5.0);
for(register int i = 0; i < 10000; i++){
double num = nor(rand);
if ((num >= 0.0) && (num < 20.0)) ++p[int(num)];
}
for (int i = 0; i < 20; ++i) {
cout << i << "-" << (i + 1) << ": ";
cout << std::string(p[i] * 100 / 10000, '*') << std::endl;
}
return 0;
}
小结
目前常用的这些吧
如果后续再有需求再补充v吧
C++11 随机数生成器的更多相关文章
- BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘
题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...
- [BZOJ3671][UOJ#6][NOI2014]随机数生成器
[BZOJ3671][UOJ#6][NOI2014]随机数生成器 试题描述 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来 ...
- NOI2014 随机数生成器
随机数生成器 [问题描述] 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来获得随机性.事实上,随机数生成函数也并不是真正的 ...
- Linux下对拍脚本与随机数生成器
对拍脚本 新建一个文档 check.sh 作为对拍脚本. #!/bin/bash while(true)do #死循环 ./data > .in #运行数据生成器,将数据输出到1.in ./st ...
- 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器
963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 栋 ...
- BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )
矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...
- Swift - 产生不重复数字的随机数生成器
在Swift中,可以使用函数类型的参数,也可以使用函数类型的返回值.而作为返回值的函数,还能“捕获”外部的值,并多次使用它.这个特性,常可用来创建各种生成器. 下面通过创建一个“随机数生成器函数”作为 ...
- 【矩阵乘】【NOI 2012】【cogs963】随机数生成器
963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对照 时间限制:1 s 内存限制:128 MB **[问题描写叙述] 栋栋近期迷 ...
- 【BZOJ2875】随机数生成器(矩阵快速幂)
[BZOJ2875]随机数生成器(矩阵快速幂) 题面 Description 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me ...
随机推荐
- linux下使用vim创建编辑文件
vi/vim 使用实例 如果要想用vim/vi创建一个文件(使用命令): vim test.txt 不管文件存在与否 直接输入 vi 文件名 就能够进入 vi 的一般模式 按下 i 进入输入模式( ...
- 利用JavaScript当鼠标点击导航时改变背景
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spring Boot 集成 Memcached
Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站 ...
- 关于Junit4 和 Junit5.4
1. Junit5.4 主要是用于Maven框架 , 对普通类的测试是不可以的. 如这个, junit4可以, junit5.4不可以. 2. Junit不可以使用 static 静态方法. 关 ...
- C#-接口(Interface)详解
定义 在 C# 语言中,类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的.一个类能同时实现多个接口,还能在实现接口的同时再继承其他类,并且接口之间也可以继承.无论是表示类之间的继承还 ...
- WebApis中BOM的学习
1.1. 常用的键盘事件 1.1.1 键盘事件 <script> // 常用的键盘事件 //1. keyup 按键弹起的时候触发 document.addEventListener('ke ...
- 程序员小哥教你秋招拿大厂offer
快要到秋招了,对于应届生来说,秋招是一个特别重要的机会.对于社招同学来说,金九银十也是一个很好的跳槽窗口. 而我呢,因为是从上海到广州工作,就没有提前先把工作定下来.刚好也趁这个机会出去旅游了两个月. ...
- Jeecg-Cloud学习之路(一)
首先,Spring-Cloud目前是行业的潮流,貌似不会就落后了,笔者为了不脱离大部队只能深入学习一下了. 其次.跳槽到一家公司,给公司推荐了Jeecg-Boot的开发平台,那么为了后面扩展为clou ...
- 文件属性及find命令总结
第1章 文件属性 1.1 文件的属性 1.1.1 查看文件的详细属性 PS:ls查看的文件或目录默认的是按照名字的第一个字母进行正序排序 ls 参数选项: -t ...
- Pytest-allure 生成美观好看的测试报告
在我们使用pytest-allure生成测试报告时,需要分为以下几步来执行 1.pytest TestCal.py --alluredir=/tmp/my_allure_results[这一步,是设置 ...