产生随机数在程序中很有用,这篇文章简单介绍一下产生随机数的方法。

伪随机数

使用标准库<cstdlib>中的rand()函数产生随机数。

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
    ; i < ; i++) cout << rand()% << endl;//pesudo radom
    ;
}

表面上看,这段程序会产生三个随机数,但一个有趣的事情是,每次程序运行时产生的数据都是相同的。

我每次运行的结果都如下:

可以看出,rand()函数并不会产生一个真正的随机数。

要产生真正的随机数,需要了解time函数。

time函数

<ctime>中的time函数可以返回一个时间。函数声明如下

time_t time(
   time_t *timer
);

参数timer是一个指针,指向时间的存储位置。使用时参数可以为0。如果使用其他整数,比如1,会产生无法从int转换成timme_t的错误。

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
    cout << time()<<endl;
    ;
}

对于time函数的返回值,一把理解应该是当前的时间,但事实运行结果却并不如所想。

事实上,这个结果便是当前时间,只是表示方法有所不同。这个值是从1970年1月1日午夜到现在的秒数。

真正的随机数

<cstdlib>中产生用于真正随机数的函数srand()。函数接受一个参数作为seed,用于控制rand()函数的算法。相同的seed会使rand()产生相同的结果。

所以,若要产生真正的随机数,可以使用时间作为seed,这样每次都会产生真正的随机数了。

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
    srand(time());
    ; i < ; i++) cout << rand() << endl;//truly random
    ;
}

这样,在使用了stan()之后,rand便可产生真正的随机数了。

控制随机数的范围

可以使用模运算来控制随机数的范围。下面代码产生了[0,10)范围的随机数。

rand()%;

一个例子,展示了这篇文章提及的函数。

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
    cout << time()<<endl;//返回一个秒数
    ; i < ; i++) cout << rand() << endl;//pesudo radom
    srand(time());
    ; i < ; i++) cout << rand()% << endl;//truly random
    ;
}

首先输出一个秒数。

接着输出了3个随机数,这三个随机数每次都是相同的。

使用时间作为seed,rand()函数的返回值。

产生3个真随机数,其范围是[0,10)。

C++杂谈(三)产生随机数与time函数的更多相关文章

  1. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  2. python成长之路第三篇(1)_初识函数

    目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...

  3. 跟着老男孩教育学Python开发【第三篇】:Python函数

    set 无序,不重复,可嵌套. 函数 创建函数: 1.def关键字,创建函数 2.函数名 3.() 4.函数体 5.返回值 发邮件函数 def sendmail():     import smtpl ...

  4. 在一定[min,max]区间,生成n个不重复的随机数的封装函数

    引:生成一个[min,max]区间的一个随机数,随机数生成相关问题参考→链接 var ran=parseInt(Math.random()*(max-min+1)+min); //生成一个[min,m ...

  5. 【javascript杂谈】你所不知道的replace函数

    前言 最近在做面试题的时候总会用到这个函数,这个函数总是和正则表达式联系到一起,并且效果很是不错,总能很简单出色的完成字符串的实际问题,大家肯定都会使用这个函数,像我一样的初学者可能对这个函数的了解还 ...

  6. unity中三种调用其他脚本函数的方法

    第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名()第二种,GameObject.Find("脚本所在的物体的名字").SendMessage(" ...

  7. salesforce 零基础学习(三十九) soql函数以及常量

    在salesforce中,我们做SOQL查询时,往往需要用到计算式,比如求和,求平均值,或者过滤数据时,往往需要通过时间日期过滤,SOQL已经封装了很多的函数,可以更加方便我们的sql查询而不需要自己 ...

  8. JS生成随机数的各种函数

    第一种方法 /* *@desc:生成随机字符串 *@remark:toString方法可以接收一个基数作为参数的原理,这个基数从2到36封顶.如果不指定,默认基数是10进制 */ function g ...

  9. 循序渐进Python3(三) -- 3 -- 内置函数

    上一篇我们又介绍了26个Python内置函数.现回忆一下吧: 1.all 2.any 3.ascii 4.bin 5.bool 6.bytes 7.bytearray 8.callable 9.chr ...

随机推荐

  1. Qt And MFC Mouse Over Tips

    Qt鼠标提示分析说明 关于鼠标停留在控件上面,显示提示内容的方法. 对于Qt来说, Qt的某一个控件类, 如果属于GUI的, 那么这个控件类会有一个setToolTip(QString text)的方 ...

  2. simpleCart的简单使用及配置

    simpleCart的功能就不用解释,购物车,很6.官网上的说明太模糊了,还是GIHUb上的好一点:https://github.com/wojodesign/simplecart-js/ 文章解决问 ...

  3. mysql case when then end学习

    表 vtiger_acctive,字段 id,name. 1. 查询中使用 # 查询如果name的值为 hello1 时输出 6666,当值为 hello2 时,输出 333333 select ca ...

  4. Spring+Mybatis+Maven+MySql搭建实例

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何使用Maven来搭建Spring+Mybatis+MySql的的搭建实例 ...

  5. STL中vector小结

    ()使用vector之前必须包含头文件<vector>:#include<vector> ()namespace std{ template <class T, clas ...

  6. 烂泥:【解决】word复制windows live writer没有图片

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在使用windows live writer发表博客,博客先是在是word2013中进行编辑,编辑完毕后我会复制到windows live writer ...

  7. Deep Learning Tutorial

    http://www.slideshare.net/tw_dsconf/ss-62245351?qid=c0f0f97a-6ca8-4df0-97e2-984452215ee7&v=& ...

  8. Codeforces 712 D. Memory and Scores (DP+滚动数组+前缀和优化)

    题目链接:http://codeforces.com/contest/712/problem/D A初始有一个分数a,B初始有一个分数b,有t轮比赛,每次比赛都可以取[-k, k]之间的数,问你最后A ...

  9. windows下编译支持https的libcurl

    本文参考http://blog.csdn.net/fragmentalice/article/details/39430293特此感谢.公司项目中用到几个http get请求,用的libcurl开源库 ...

  10. SQLSERVER 更改默认端口号

    最近这几天,服务器的数据库(SQLSERVER)老是遭受到攻击,有人不断地轮训想登陆数据库,从SQL的日志里可以看出来,一开始我是通过本地安全策略禁用了对应的几个攻击ip,同时把数据库的sa账号给禁用 ...