关于产生随机数列的重点-自己遇到的问题

srand()((unsigned int)time(0));
srand()的形参是unsigned int类型的;
这句话只要写一次,一般情况下只能写一次;
随机数是随机的数,但计算机不可能产生随机数,计算机根据你的输入,再跟一个算法就产生一个特定的序列.只要
你给计算机一个相同的数,计算机返回的就是一个特定的数,所以这样的数叫做伪随机数.

而srand()(unsigned int par);这就是原型,这就是你给计算机的数.计算机通过rand()返回一个序列,

假设是{2,6,8,51....},只要给相同的参数, 这个序列是特定的.int a=rand();这时候a=2;所以可以得出只要每次给计

算机不同的数也就是srand(unsigned int pra)也就是给pra是不同的值,我们就可以认为这个序列是随机的.要想给不

同的值,

最简单的方法是把系统时间转化成unsigned给计算机就可以了,因为每时每刻时间都是不同的.这里要注意,时间是秒为
单位,也就是说你如果srand((unsigned)time(NULL));

只是在每一秒内取随rand()的话,因为时间还没来得及变,它还不是完全随机的,在下一秒就会换取另一条序列,可以
说是相对的随机。这牵扯掉内部的东西,只要知道层面上的东西就够了。现在我来告诉你为什么你得到了2组一样的结
果,因为计算机运算的速度是相当快的,你的2次srand()取值操作肯定是在一秒内之间发生的,第一次产生随机数
后,你又写了一遍srand((unsigned)time(NULL)); 相当于根据时间又埋下了种子,而这次埋下的种子和上一次的种子

是完全相同的,所以产生的序列也相同,于是计算机又按顺序从头开始把这条序列中的值取出来,产生了上述结果;
总结,在程序中只要写一次srand((unsigned)time(NULL)); 这个很重要,重复调用 会出现随机出来的点数容易相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值