c++ 随机数相关的一些函数
随机数的原理介绍,有兴趣的话不妨阅读以下:http://blog.skyoung.org/2013/08/27/generate-random-number
C语言风格的随机数生成主要是两个函数srand(), rand(). srand()设置随机数种子,rand得到[0, RAND_MAX]中的元素。下面代码是[a,b]均匀分布函数。
1 #include<cstdlib> 2 int uniform_random(int a, int b) 3 { 4 if(a == b){ 5 return a; 6 } 7 return rand()%(b-a) + a; 8 }
这种方法简单,但是并不能很好的生成随机数。
c++11 中用随机生成器以及分布来生成我们想要的随机数,生成器相当于rand(),分布对象则对生成的随机数进行变换,得到满足分布的随机数。
1 #include <iostream> 2 #include <random> 3 int main() 4 { 5 std::uniform_real_distribution<> dis1(0.0,100.0); 6 std::uniform_int_distribution<> dis2(0,100); 7 std:: default_random_engine gen; 8 cout<< "double = "dis1(gen()) << "\tint = " <<dis2(gen)<<endl; 9 return 0; 10 }
另外可以用std::bind函数减少代码量。
google 貌似挺喜欢考随机数的题目的。
1.随机打乱一个数组,也就是实现c++库函数random_shuffle。此算法思路是每次在数组中随机选择一个元素放到数组尾部,知道数组元素全都被排好。
1 #include <iostream> 2 #include <random> 3 template <class RandomAccessIterator> 4 void random_shuffle(RandomAccessIterator first, RandomAccessIterator last) 5 { 6 auto n = (last-first); 7 std::default_random_engine gen; 8 for(auto i = n-1; i > 0; --i){ 9 std::uniform_int_distribution<> rand(1, i); 10 std::swap(first[rand(gen)], first[i]); 11 } 12 } 13 int main() 14 { 15 int array[] = {1,2,3,4,5,6,7}; 16 random_shuffle(std::begin(array), std::end(array)); 17 for(auto e : array){ 18 std::cout<<e <<"\t"; 19 } 20 return 0; 21 }
secret santa 是有n个人圣诞节大家互相送礼物,使得每个人随机收到礼物并且礼物不能来自自身。我们可以每次对这些礼物进行random_shuffle如果有人收到本身做礼物的话则重新random_shuffle
#include <iostream> #include <random> #include <vector> void secret_santa(std::vector<int>& gifts) {random_shuffle(begin(gifts), end(gifts));for(int i = 0; i < gifts.size(); ++i){if(gifts[i] == i+1){secret_santa(gifts);return;}} }
转载于:https://www.cnblogs.com/Jaunty/p/5053512.html
c++ 随机数相关的一些函数相关推荐
- python中random模块中包含了随机数相关的功能函数_Python中random模块生成随机数详解...
print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20 #pr ...
- R语言使用rcauchy函数生成符合柯西分布的随机数、使用plot函数可视化符合柯西分布的随机数(Cauchy distribution)
R语言使用rcauchy函数生成符合柯西分布的随机数.使用plot函数可视化符合柯西分布的随机数(Cauchy distribution) 目录
- R语言使用rweibull函数生成符合威布尔(韦伯分布)分布的随机数、使用plot函数可视化符合威布尔(韦伯分布)分布的随机数(Weibull Distribution)
R语言使用rweibull函数生成符合威布尔(韦伯分布)分布的随机数.使用plot函数可视化符合威布尔(韦伯分布)分布的随机数(Weibull Distribution) 目录
- R语言使用rgamma函数生成符合Gamma分布的随机数、使用plot函数可视化符合Gamma分布的随机数(Gamma Distribution)
R语言使用rgamma函数生成符合Gamma分布的随机数.使用plot函数可视化符合Gamma分布的随机数(Gamma Distribution) 目录
- R语言使用runif函数生成符合均匀分布的随机数、使用plot函数可视化符合均匀分布的随机数(Uniform Distribution)
R语言使用runif函数生成符合均匀分布的随机数.使用plot函数可视化符合均匀分布的随机数(Uniform Distribution) 目录
- c语言随机坐标函数,c语言随机数生成函数和时间函数
c语言随机数生成函数和时间函数 c语言随机数生成函数和时间函数是如何生成的呢?小编为大家揭秘来了.更多内容请关注应届毕业生考试网! 一 随机数生成函数(rand,srand) 1)首先,随机数在std ...
- linux路由相关函数,Linux 路由 学习笔记 之十一 输入、输出路由查找相关的接口函数...
对于路由功能模块的学习,也已经很长时间了.关于路由项的创建与查找.策略规则相关的创建与查找.路由缓存的创建与查找,都是分开来分析的,没有说明这些模块是如何配合使用的,以及模块之间的联系.本节就分析一下 ...
- R语言使用rbern函数生成符合伯努利分布(0-1分布)的随机数、使用plot函数可视化符合伯努利分布的随机数( Bernoulli distribution)
R语言使用rbern函数生成符合伯努利分布(0-1分布)的随机数.使用plot函数可视化符合伯努利分布的随机数( Bernoulli distribution) 目录
- 41.从入门到精通:格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函数
41.从入门到精通:格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函数 格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函 ...
- EA开发系列--交易以及交易相关的回调函数
概要 EA在绝大多数场景下被用作自动化交易,因此,交易也就是EA的核心内容,这一节,介绍如何交易以及与交易相关的回调函数.这里包括两部分内容: 1.交易订单处理:挂单,现价单,止盈,止损等设定 2.O ...
最新文章
- Android拷贝工程不覆盖原工程的配置方法
- C语言函数名与函数指针详解
- Unity 2018.3.1 SyncVar没有同步服务器变量
- Cloud for Customer的设置加载机制
- python a and b_python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更...
- 多核cpu应用场景_CPU占用100%!PC卡顿原来可以这么解决:多场景多任务也流畅
- 显示器接口VGA、DVI、HDMI、DP
- MyBatis全局配置文件和映射文件
- Ubuntu(Debian)apt-get
- 【图论】最短路学习笔记
- java 8 中文字体_jdk安装中文字体,解决Can't read the embedded font LNUHUF+SimSun
- java工作流flowable
- 微信小程序获取验证码
- 矢量绘图设计AI 2022
- 执行脚本报:ORA-24344: success with compilation error
- Rhino学习教程——1.2
- Siri语音控制树莓派开关灯 --智能家居
- docker安装nginx(神坑记录)
- EAS F7控件弹出表格隐藏某列
- 关于WebView加载H5页面下载文件和下载完毕后自动打开文件