从学习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