随机数的原理介绍,有兴趣的话不妨阅读以下: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++ 随机数相关的一些函数相关推荐

  1. python中random模块中包含了随机数相关的功能函数_Python中random模块生成随机数详解...

    print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20 #pr ...

  2. R语言使用rcauchy函数生成符合柯西分布的随机数、使用plot函数可视化符合柯西分布的随机数(Cauchy distribution)

    R语言使用rcauchy函数生成符合柯西分布的随机数.使用plot函数可视化符合柯西分布的随机数(Cauchy distribution) 目录

  3. R语言使用rweibull函数生成符合威布尔(韦伯分布)分布的随机数、使用plot函数可视化符合威布尔(韦伯分布)分布的随机数(Weibull Distribution)

    R语言使用rweibull函数生成符合威布尔(韦伯分布)分布的随机数.使用plot函数可视化符合威布尔(韦伯分布)分布的随机数(Weibull Distribution) 目录

  4. R语言使用rgamma函数生成符合Gamma分布的随机数、使用plot函数可视化符合Gamma分布的随机数(Gamma Distribution)

    R语言使用rgamma函数生成符合Gamma分布的随机数.使用plot函数可视化符合Gamma分布的随机数(Gamma Distribution) 目录

  5. R语言使用runif函数生成符合均匀分布的随机数、使用plot函数可视化符合均匀分布的随机数(Uniform Distribution)

    R语言使用runif函数生成符合均匀分布的随机数.使用plot函数可视化符合均匀分布的随机数(Uniform Distribution) 目录

  6. c语言随机坐标函数,c语言随机数生成函数和时间函数

    c语言随机数生成函数和时间函数 c语言随机数生成函数和时间函数是如何生成的呢?小编为大家揭秘来了.更多内容请关注应届毕业生考试网! 一 随机数生成函数(rand,srand) 1)首先,随机数在std ...

  7. linux路由相关函数,Linux 路由 学习笔记 之十一 输入、输出路由查找相关的接口函数...

    对于路由功能模块的学习,也已经很长时间了.关于路由项的创建与查找.策略规则相关的创建与查找.路由缓存的创建与查找,都是分开来分析的,没有说明这些模块是如何配合使用的,以及模块之间的联系.本节就分析一下 ...

  8. R语言使用rbern函数生成符合伯努利分布(0-1分布)的随机数、使用plot函数可视化符合伯努利分布的随机数( Bernoulli distribution)

    R语言使用rbern函数生成符合伯努利分布(0-1分布)的随机数.使用plot函数可视化符合伯努利分布的随机数( Bernoulli distribution) 目录

  9. 41.从入门到精通:格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函数

    41.从入门到精通:格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函数 格式化日期 获取某月日历 Time 模块 日历(Calendar)模块 其他相关模块和函 ...

  10. EA开发系列--交易以及交易相关的回调函数

    概要 EA在绝大多数场景下被用作自动化交易,因此,交易也就是EA的核心内容,这一节,介绍如何交易以及与交易相关的回调函数.这里包括两部分内容: 1.交易订单处理:挂单,现价单,止盈,止损等设定 2.O ...

最新文章

  1. Android拷贝工程不覆盖原工程的配置方法
  2. C语言函数名与函数指针详解
  3. Unity 2018.3.1 SyncVar没有同步服务器变量
  4. Cloud for Customer的设置加载机制
  5. python a and b_python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更...
  6. 多核cpu应用场景_CPU占用100%!PC卡顿原来可以这么解决:多场景多任务也流畅
  7. 显示器接口VGA、DVI、HDMI、DP
  8. MyBatis全局配置文件和映射文件
  9. Ubuntu(Debian)apt-get
  10. 【图论】最短路学习笔记
  11. java 8 中文字体_jdk安装中文字体,解决Can't read the embedded font LNUHUF+SimSun
  12. java工作流flowable
  13. 微信小程序获取验证码
  14. 矢量绘图设计AI 2022
  15. 执行脚本报:ORA-24344: success with compilation error
  16. Rhino学习教程——1.2
  17. Siri语音控制树莓派开关灯 --智能家居
  18. docker安装nginx(神坑记录)
  19. EAS F7控件弹出表格隐藏某列
  20. 关于WebView加载H5页面下载文件和下载完毕后自动打开文件

热门文章

  1. JVM基础学习之基本概念、可见性与同步
  2. Android String占位符功能
  3. Linux 内核与模块调试
  4. 查看APP用到的图片方法
  5. SQL Server数据库简繁体数据混用的问题
  6. 挑战性题目DSCT301:求不同形态的二叉树数目
  7. BZOJ5192[Usaco2018 Feb] New Barns
  8. 微信小程序学习笔记-(10)-猫眼电影案例
  9. who 、w 查看当前登录用户
  10. Mysql8.0 15安装后怎么打开_最新最全mysql8.0.15安装配置及连接Navicat教程