C++中的伪随机数_第1页
C++中的伪随机数_第2页
C++中的伪随机数_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C++中的伪随机数目录真随机数伪随机数举个例子C++代码示例题目

真随机数

自然界中的有很多不确定的物理现象,通过测量这些现象,就可以获得真随机数。

比如白噪声的幅值、电子元器件的电压噪声等,真随机数可以通过用硬件对这些参数进行采集获得。

伪随机数

伪随机数序列是用确定性的算法计算出来的周期很长的序列。

程序的运行过程是一个确定的过程,每一条指令都是确定的,因此不能产生真的随机数。

说到伪随机数就会说到种子,什么是种子呢,我们可以将种子理解为一个初始值,特定算法根据这个初始值产生一个一定的序列,生成的这个序列看起来是随机的,实际上是一个周期很长的确定序列。

如果每次的种子设置得相同,那么产生的序列都是相同的。

举个例子

我们可以简单的设置这个种子为某个数,比如1。

请看如下代码,用srand()设置种子的值,用rand()产生伪随机数序列,需要包含头文件#includestdlib.h。重复运行下列代码,因为种子相同,所以每次输出的序列都是如图的序列4118467633426500。

srand(1);//设置种子的值为1,如果不设置,默认种子为1

for(inti=0;i++i){

coutrand()"";//输出10个伪随机数

}

如果每次种子设置得不同,那生成的序列也将不同。如何获得不同的种子呢?

可以用C语言中的库函数time_ttime(time_t*seconds)返回自1970-01-0100:00:00UTC起经过的时间,以秒为单位。

这个函数的入参seconds也能保存结果,请看如下代码,输出的t和seconds的值是一样的。

time_tseconds;

time_tt=time(seconds);

coutt""secondsendl;//t和seconds的值是一样的

那么,我们将当前的时间设置为种子,由于时间一直在变,种子就一直在变,每次就能生成不同的伪随机数序列。

time_tt=time(nullptr);

srand(t);//设置种子的值为时间

for(inti=0;i++i){

coutrand()"";

}

C++代码示例

题目

将1-100的有序序列变成无序序列,要求每次运行的结果不同。

//题目:将1-100的有序序列变成无序序列,要求每次运行的结果不同。

voidfun(vectorintvec){

time_tt=time(nullptr);

srand(t);//设置种子的值为时间

rand();

for(inti=0;i500;++i){

//每次随机交换数组中的两位

swap(vec[rand()%100],vec[rand()%100]);

intmain(){

vectorintvec(100);

for(inti=0;i100;++i){

vec[i]=i+1;

fun(vec);

for(autoit:vec){

couti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论