C/C++怎么生成“真正的”随机数

C语言中,直接用rand()函数生成随机数的话,会出现一个尴尬的局面,那就是每次运行都会生成相同的一个数,这显然不能满足我们的期望。怎么回事呢?

不管从哲学上说,还是从技术上说,都难以生成绝对随机的随机数,但是我们可以尽可能让那些“伪随机数”更像是“真正的”随机数。

先认识srand()

srand()是随机数发生器的初始化函数。原型函数是srand(unsigned int seed),通过参数seed改变系统提供的种子值。常用的srand((unsigned)time(NULL))就是根据系统的计时器来改变种子值,time(NULL)是用一套预先设定好的算法计算出的随机数,会随着时间变化。

为了清晰地看到seed的值随时间变化的情形,设计了下面几行代码。编译后多次运行,每次都能输出一个不同的值。

#include#includeusing namespace std;

int main()

{

int s=(unsigned)time(NULL);

cout<

再说说seed

系统调用rand()之前会先调用srand(),看用户有没有给seed一个指定的值。如果有,就用这个值作为产生伪随机数的初始值,如果没有,就会用一个固定不变的数作为初始值(这个值与系统有关)。

这就解释了为什么不用srand()给初始值,或是用了srand()但是给一个定值会导致随机数不变的问题。简单的说,只有种子的值变了,随机数才有可能变化。

回归正题

现在,我们貌似能够生成几个像样的随机数了。

#include#include#include#includeusing namespace std;

int main()

{

int a=1,b=50;

srand((unsigned)time(NULL));

for(int i=1;i<=10;++i)

{

int n=a+rand()%(b-a+1);

cout<

上面的代码将生成十个1到50之间的整数随机数。

注:怎么让rand()生成一定范围内的随机整数?

简单说,要生成a到b之间的整数(包含a和b),用a+rand%(b-a+1)就好了。

通俗说,a告诉系统该从哪里开始找随机数,而b-a+1则表示备选范围中一共有多少个整数。

结语

我是个初学者。过去是,现在是,以后还是。

博客有两个目的,一是备忘,虽然是些基础的知识(或是常识),仍然值得回味。二是因为我的水平较低,想多和大家交流,探讨,提升自己的水平。

原创文章,请尊重版权。

c++语言生成一个随机数,C/C++怎么生成“真正的”随机数相关推荐

  1. oracle 随机数重复吗,Oracle生成不重复随机数

    项目中要依据车牌号码.日期和随机码生成运单号,所以写了函数和创建了历史码存储表来保证运单号的不重复. 运单号=车牌号码+日期+四位随机码 1.创建历史运单号存储表(用来比对新生成的随机号是否已被使用) ...

  2. php生成随机数永不重复,PHP生成不重复随机数的方法汇总

    本文汇总了5种生成不重复随机数的方法,其中方法一.二.三是本人常用的方法,方法四五来至度娘.其余方法还是有的,也欢迎大家将遗漏的方法告之,大家共同进步 方法一: $numbers = range (1 ...

  3. python生成50个随机数_Python:如何生成12位随机数?

    直截了当的方法有什么问题? >>> import random >>> random.randint(100000000000,999999999999) 5442 ...

  4. java生成指数分布随机数_生成特定分布随机数的方法

    生成随机数是程序设计里常见的需求.一般的编程语言都会自带一个随机数生成函数,用于生成服从均匀分布的随机数.不过有时需要生成服从其它分布的随机数,例如高斯分布或指数分布等.有些编程语言已经有比较完善的实 ...

  5. 随机数相加等于固定值_excel固定随机数相加得一个固定值

    专业化形象公式:=int(20*Rnad())标准动作公式:=int(70(Rand())... 1.生成第一个随机数.在E2单元格内输入公式"=ROUNDUP(RAND()*2*(100- ...

  6. 【C语言】rand()函数(如何生成指定范围随机数)

    一.rand()函数简介 我们先来看一下cplusplus.com - The C++ Resources Network网站上rand函数的基本信息: 系统生成随机数时需要使用rand函数(rand ...

  7. R语言生成组合图并保存实战:实际上只保存了最后一个图问题、ggsave生成组合图并保存(保存完整组合图)

    R语言生成组合图并保存实战:实际上只保存了最后一个图问题.ggsave生成组合图并保存(保存完整组合图) 目录

  8. JAVA生成不重复随机数算法

    一个不错的算法,很简单,但有效.不过如果范围比较大,则占用内存大,就不推荐使用了.个人感觉1000个以内的就可以考虑.这东西也许你早就知道了,但我依然惊叹算法的力量. 看代码 import java. ...

  9. shell 生成指定范围随机数与随机字符串 .

    shell 生成指定范围随机数与随机字符串         分类:             shell              2014-04-22 22:17     20902人阅读     评 ...

最新文章

  1. 信息熵是什么 转 理论吃透的创新解释
  2. 《幸福就在你身边》第八课、幸福比成功更重要【哈佛大学幸福课精华】
  3. 计组—存储以及字、位扩展
  4. python:__new__()与__init__()
  5. mssql 字增自段怎样重置(重新自增)|清空表已有数据
  6. JavaScript的Function 类型
  7. 每天花30分钟看OGRE--(13)Ogre的渲染流程,在渲染时材质是如何起作用的,材质加载和解析...
  8. 计算机组成原理上机试卷,计算机组成原理试卷及答案
  9. Schlumberger.SPAN.Rock.v9.1.5 1CD跨度岩石强调岩石射孔分析软件
  10. Android接入融云即时通讯SDK,实现单聊和发送自定义消息。
  11. 玩转人工智能(11)使用Pyspark上手机器学习
  12. fatal error C1083: 无法打开包括文件: “SDKDDKVer.h”: No such file or directory
  13. R语言ggplot2边框背景去除
  14. android实现多任务多线程支持断点下载的下载软件
  15. 海康威视错误代码0xf_调用海康威视sdk获取车牌号
  16. HTML鲜花网页制作,Htlm技术设计鲜花盛开效果动态图
  17. 计算机无法开机如何读u盘启动,电脑无法识别U盘启动盘怎么办?
  18. C语言常用字符串函数——头文件 <string.h> 到底有什么?
  19. 股票资管分仓和期权资管分仓功能的区别及搭建
  20. 英语知识点整理day14-谚语学习(F字母开头)

热门文章

  1. WINCE config.bib文件中的FSRAMPERCENT的意义
  2. 分布式事务中间件Fescar—全局写排它锁解读
  3. React Ways1——函数即组件
  4. 调整分区后盘符丢失的资料怎么寻回
  5. AGG第三十五课 gsv_text 渲染ASCII字符
  6. c++ STL unique , unique_copy函数
  7. 获取项目版本号与设置引导页的判断条件
  8. 2015/06/08
  9. PHP的mongo扩展版本过低导致无法查询
  10. Tomcat中两个不同项目共享Session