c++语言生成一个随机数,C/C++怎么生成“真正的”随机数
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++怎么生成“真正的”随机数相关推荐
- oracle 随机数重复吗,Oracle生成不重复随机数
项目中要依据车牌号码.日期和随机码生成运单号,所以写了函数和创建了历史码存储表来保证运单号的不重复. 运单号=车牌号码+日期+四位随机码 1.创建历史运单号存储表(用来比对新生成的随机号是否已被使用) ...
- php生成随机数永不重复,PHP生成不重复随机数的方法汇总
本文汇总了5种生成不重复随机数的方法,其中方法一.二.三是本人常用的方法,方法四五来至度娘.其余方法还是有的,也欢迎大家将遗漏的方法告之,大家共同进步 方法一: $numbers = range (1 ...
- python生成50个随机数_Python:如何生成12位随机数?
直截了当的方法有什么问题? >>> import random >>> random.randint(100000000000,999999999999) 5442 ...
- java生成指数分布随机数_生成特定分布随机数的方法
生成随机数是程序设计里常见的需求.一般的编程语言都会自带一个随机数生成函数,用于生成服从均匀分布的随机数.不过有时需要生成服从其它分布的随机数,例如高斯分布或指数分布等.有些编程语言已经有比较完善的实 ...
- 随机数相加等于固定值_excel固定随机数相加得一个固定值
专业化形象公式:=int(20*Rnad())标准动作公式:=int(70(Rand())... 1.生成第一个随机数.在E2单元格内输入公式"=ROUNDUP(RAND()*2*(100- ...
- 【C语言】rand()函数(如何生成指定范围随机数)
一.rand()函数简介 我们先来看一下cplusplus.com - The C++ Resources Network网站上rand函数的基本信息: 系统生成随机数时需要使用rand函数(rand ...
- R语言生成组合图并保存实战:实际上只保存了最后一个图问题、ggsave生成组合图并保存(保存完整组合图)
R语言生成组合图并保存实战:实际上只保存了最后一个图问题.ggsave生成组合图并保存(保存完整组合图) 目录
- JAVA生成不重复随机数算法
一个不错的算法,很简单,但有效.不过如果范围比较大,则占用内存大,就不推荐使用了.个人感觉1000个以内的就可以考虑.这东西也许你早就知道了,但我依然惊叹算法的力量. 看代码 import java. ...
- shell 生成指定范围随机数与随机字符串 .
shell 生成指定范围随机数与随机字符串 分类: shell 2014-04-22 22:17 20902人阅读 评 ...
最新文章
- 信息熵是什么 转 理论吃透的创新解释
- 《幸福就在你身边》第八课、幸福比成功更重要【哈佛大学幸福课精华】
- 计组—存储以及字、位扩展
- python:__new__()与__init__()
- mssql 字增自段怎样重置(重新自增)|清空表已有数据
- JavaScript的Function 类型
- 每天花30分钟看OGRE--(13)Ogre的渲染流程,在渲染时材质是如何起作用的,材质加载和解析...
- 计算机组成原理上机试卷,计算机组成原理试卷及答案
- Schlumberger.SPAN.Rock.v9.1.5 1CD跨度岩石强调岩石射孔分析软件
- Android接入融云即时通讯SDK,实现单聊和发送自定义消息。
- 玩转人工智能(11)使用Pyspark上手机器学习
- fatal error C1083: 无法打开包括文件: “SDKDDKVer.h”: No such file or directory
- R语言ggplot2边框背景去除
- android实现多任务多线程支持断点下载的下载软件
- 海康威视错误代码0xf_调用海康威视sdk获取车牌号
- HTML鲜花网页制作,Htlm技术设计鲜花盛开效果动态图
- 计算机无法开机如何读u盘启动,电脑无法识别U盘启动盘怎么办?
- C语言常用字符串函数——头文件 <string.h> 到底有什么?
- 股票资管分仓和期权资管分仓功能的区别及搭建
- 英语知识点整理day14-谚语学习(F字母开头)