C++ 随机数浅谈

从学习C语言就会接触到的一个东西,随机数,但是在这个随机数真的是随机的吗?答案肯定是不是的,对于计算机的所以语言实现的所有随机数的方法都是伪随机的,只不过很接近随机数.
在C++中,使用随机数用到的API是rand(),可以去百度一下之类的看看,这个API在一定的程度是多次甚至每次都会取到相同的随机,什么原因,有人解释的比我好,所以不需要我去多解释了吧,这里我说一说怎么用吧.加上一个time的算法,也就是计算机的系统试讲相关,这样的话就会使得这个随机数的种子发生变化,从而变得"随机"起来.

//头文件
#include <time.h>
srand((unsigned)time(NULL));

升华的随机数的区间

(a,b) #define Random(a,b) (rand()%(b-a+1))+a-1
[a,b) #define Random(a,b) (rand()%(b-a))+a
(a,b] #define Random(a,b) (rand()%(b-a))+a+1
[a,b] #define Random(a,b) (rand()%(b-a+1))+a

升华部分如果你只想怎么去用的话,直接拿去用,肯定是没有错的,但是如果以后的,没有网的情况下,找不到资料,不会写不就完蛋了,所以接下来我解释一下升华部分的是怎么来的,随便挑一个说说,就说第四个,区间是[a,b]:
第一步,确定区间大小,也就是数据的个数,是b-a+1,这个不用说吧。
第二步,试着去取同样区间大小的随机数,rand()%x 的区间是[1,x-1],就这样可以试着去取一下,取rand%(b-a+2),大小为b-a+1,不是么?
第三步,按上一步取的区间,应该是[1,b-a+1],那么加上一个a-1呢?是不是就是从a开始了,到b结束了?所以就是rand%(b-a+2)+a-1
第四步,合并不必要的数字,也就是把1合并进rand,不就得到上述的函数了?
end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容