使用cstdlib库

C++11之前,C和C++都用相同的方法来产生随机数(伪随机数),即rand()函数,用法如下:

1)使用srand()撒一个种子

功能:初始化随机数发生器

用法:void srand(unsigned int seed)

2)使用rand()产生随机数

功能:随机数发生器

用法:int rand(void)

3)控制随机数范围

要取得 [a,b) 的随机整数,使用 (rand() % (b-a))+ a;

要取得 [a,b] 的随机整数,使用 (rand() % (b-a+1))+ a;

要取得 (a,b] 的随机整数,使用 (rand() % (b-a))+ a + 1;

** 参考:C++ rand 与 srand 的用法

4)示例代码

#include <iostream>
#include <ctime>
#include <cstdlib>int getRand(int min, int max);int main() {srand(time(0));for (int i=0; i<10; i++) {int r = getRand(2,20);std::cout << r << std::endl;}return 0;
}// 左闭右闭区间
int getRand(int min, int max) {return ( rand() % (max - min + 1) ) + min ;
}

使用random库:c++11 random library

C++11之前,无论是C,还是C++都使用相同方式的来生成随机数,而在C++11中提供了随机数库,包括随机数引擎类随机数分布类,简介如下:

随机数引擎类

一般使用 default_random_engine 类,产生随机非负数(不推荐直接使用)

直接使用时:

#include <iostream>
#include <ctime>
#include <random>int main() {std::default_random_engine e;e.seed(time(0));for (int i=0; i<10; i++) {std::cout << e() << std::endl;}return 0;
}

输出结果:

16807
282475249
1622650073
984943658
1144108930
470211272
101027544
1457850878
1458777923
2007237709

随机数分布类

uniform_int_distribution:产生均匀分布的整数

示例代码:

#include <iostream>
#include <ctime>
#include <random>int main() {std::default_random_engine e;std::uniform_int_distribution<int> u(2,20); // 左闭右闭区间e.seed(time(0));for (int i=0; i<10; i++) {std::cout << u(e) << std::endl;}return 0;
}

输出结果:

4
5
16
17
15
17
6
10
13
13

uniform_real_distribution:产生均匀分布的实数

#include <iostream>
#include <ctime>
#include <random>int main() {std::default_random_engine e;std::uniform_real_distribution<double> u(1.5,19.5); // 左闭右闭区间e.seed(time(0));for (int i=0; i<10; i++) {std::cout << u(e) << std::endl;}return 0;
}

输出结果:

11.9673
2.29179
9.82668
9.82764
10.2394
13.8324
2.95336
9.72177
16.5145
12.1421

normal_distribution:产生正态分布的实数

示例代码:

#include <iostream>
#include <ctime>
#include <random>int main() {std::default_random_engine e;std::normal_distribution<double> u(0,1); // 均值为0,标准差为1e.seed(time(0));for (int i=0; i<10; i++) {std::cout << u(e) << std::endl;}return 0;
}

输出结果:

0.390995
-0.680137
-1.02953
-0.53243
0.375886
-0.19804
-0.796159
0.837714
0.899632
2.06609

bernoulli_distribution:生成二项分布的布尔值

#include <iostream>
#include <ctime>
#include <random>int main() {std::default_random_engine e;std::bernoulli_distribution u(0.8); // 生成1的概率为0.8e.seed(time(0));for (int i=0; i<10; i++) {std::cout << u(e) << std::endl;}return 0;
}

输出结果:

1
0
1
1
1
1
1
1
1
1

** 参考:C++11新特性(75)-随机数库(Random Number Library)

C++产生随机数的几种方法相关推荐

  1. python生成100个随机数_Python_0——100闭区间产生3个随机数,两种方法排序

    ''' 题目:0--100闭区间产生3个随机数,两种方法排序 法1:暴力遍历 法2:max(a,b,c)min(a,b,c) 注意:random,radint(0--100)产生随机数 '''impo ...

  2. 生成不重复的随机数的三种方法

    下面我以生成1-10之间的10个不重复的随机数为例介绍生成不重复的随机数的三种方法: 1,通过while循环来实现   通过while循环不停的生成随机数,直到生成一个不重复的为止,这种方法比较容易想 ...

  3. java 生成随机数_Java 生成随机数的 N 种方法

    原标题:Java 生成随机数的 N 种方法 www.baeldung.com/java-generating-random-numbers 1.引言 本文将探讨用 Java 生成随机数的不同方法. 2 ...

  4. c# 从一组数中随机抽取一定个数_C#产生指定范围随机数的几种方法-亮术网

    在开发过程中,常常要产生随机数,如生成静态 html 网页时,文件名通常用产生随机数的方式获得,生成定单的时候,定单号也可以用产生随机数的方式获得等. 在 C# 中,一般都用 Random 产生随机数 ...

  5. java 获取区间随机数_Java获取随机数的3种方法

    主要介绍了Java获取随机数的3种方法,主要利用random()函数来实现 方法1 (数据类型)(最小值+Math.random()*(最大值-最小值+1))例: (int)(1+Math.rando ...

  6. linux 命令行随机数,Linux系统产生随机数的6种方法

    Linux系统产生随机数的6种方法 1.通过系统环境变量($RANDOM)产生随机数 [root@localhost ~]# echo $RANDOM 3849 [root@localhost ~]# ...

  7. 关于如何产生随机数的几种方法汇总!(2018.07.08)

    在学习java过程中,特别是一些游戏程序或者登录验证码等会涉及到随机数这个对象,因此对此汇总一下我说了解到的获得0到100之前的随机数的几种方法: java.util.Random类中提供了多种产生随 ...

  8. java随机数转换_Java获取随机数的3种方法(转)

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  9. 算法--生成m个指定范围的不重复随机数的三种方法分析(Java实现)

    Q题目 如何产生m个在0-N范围内的无重复的随机数(不包含N) A解法 2.1 常见解法有两种: 1.间接获取--采用随机下标从已实例化的数组中取元素 2.直接获取随机数--然后一一排除 2.2 间接 ...

  10. java 1%10_Java获取随机数的3种方法

    方法1 (数据类型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math.random()*(10-1+1)) 从1到10的int型随数 方法2 获得随机数 ...

最新文章

  1. getBoundingClientRect计算页面元素的offsetLeft、offsetTop
  2. Serverless 如何在阿里巴巴实现规模化落地?
  3. python中的内部函数和闭包函数
  4. 摘自《解析极限编程-拥抱变化》
  5. CommonLang3中的StringUtils最全解析
  6. 他复读才考上三本,如今让华为开出201万年薪(其实还拒绝了360万offer)
  7. Linux 和 Vim 常用命令整理
  8. Java实现将日志信息存到TXT中
  9. 62. 不同路径(JavaScript)
  10. 自动驾驶“老司机”拼车技,MIT的这个比赛已经飙到了时速123公里
  11. python def和lambda的应用
  12. Open3d之计算点云凸包
  13. 图像的三次B样条插值原理与C++实现
  14. 激光SLAM技术总结(3)3D激光SLAM算法原理
  15. java上传文件到七牛云中
  16. matlab求二阶电路图,MATLAB实验MATLAB数值计算:二阶电路时域研究
  17. 实习生与公司签订三方协议的流程与操作细节指南+配图 - CQNU Deloitte
  18. 与复旦大学《数学分析》编者商榷
  19. 使用蒙特卡洛技术解决一个小虫爬铁丝问题。
  20. matlab自带的神经网络例子,MATLAB-network m

热门文章

  1. Jemeter温故而知新
  2. 我爱赚钱吧:“容易变穷的人”的3个特征,你身上有吗?
  3. BitLocker恢复
  4. 程序员是不是“后浪”?
  5. 记录一次有关Windows的蓝屏及修复事件-WHEA_INTERNAL_ERROR-DELL戴尔G3
  6. Struts2 入门学习总结一
  7. 现代编程语言(1):Rust (铁锈,一文掌握钢铁是怎样生锈的)
  8. 王爽汇编语言 实验3
  9. php mysql 查看错误_PHP mysql查询语法错误
  10. linux增加预读缓存区大小,Linux使用blockdev命令调整文件预读大小的方法