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 ...
随机推荐
- 【API进阶之路】逆袭!用关键词抽取API搞定用户需求洞察
摘要: 老大说,我这份用关键词抽取API搞定的用户需求洞察报告,简直比比市场调研的科班人士做得还好. 最近这半个月的午饭,那可是相当不错,市场老大天天请吃饭,不是外面下馆子,就是从家带饺子.说是感谢我 ...
- java反序列化——XMLDecoder反序列化漏洞
本文首发于“合天智汇”公众号 作者:Fortheone 前言 最近学习java反序列化学到了weblogic部分,weblogic之前的两个反序列化漏洞不涉及T3协议之类的,只是涉及到了XMLDeco ...
- 更换git远程仓库地址
通过命令直接修改远程仓库地址 git remote 查看所有远程仓库 git remote xxx 查看指定远程仓库地址 git remote set-url origin 你新的远程仓库地址 先删除 ...
- HTML5实战与剖析之媒体元素
随着HTML5的到来,flash在手机端全部不能得到支持,这就使一项以flash制作的音乐播放和视频播放只能用HTML5中的媒体标签video标签和audio标签来制作了.很恰巧的是,移动端对HTML ...
- Java中抽象类和接口的介绍及二者间的区别
接口(Interface)和抽象类(Abstract Class)是支持抽象类定义的两种机制. 一.抽象类 在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称 ...
- 漏洞重温之sql注入(五)
漏洞重温之sql注入(五) sqli-labs通关之旅 填坑来了! Less-17 首先,17关,我们先查看一下页面,发现网页正中间是一个登录框. 显然,该关卡的注入应该为post型. 直接查看源码. ...
- ABP开发框架的技术点分析(1)
ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架.ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型.ABP框架可以 ...
- Spring Security如何优雅的增加OAuth2协议授权模式
一.什么是OAuth2协议? OAuth 2.0 是一个关于授权的开放的网络协议,是目前最流行的授权机制. 数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据.系统从而产生一个短期的进入令 ...
- Babel知识点相关
本篇是根据最新babel 7版本写的,里面用到的一些babel相关包都是babel 7的 1,babel是如何工作的 babel是一个转译器,这里我严格区分了转译器和编译器,因为编译器最终生成 ...
- android开发之java代码中如何获取到当前时间。详情代码带注释。
/** *获取当前时间 * @return */ public String getTime(){ Date date= new Date();//创建一个时间对象,获取到当前的时间 SimpleDa ...