伪随机数的生成

前言:

1.博主实力有限,博文有什么错误,请指出。万分感谢!
2.对像猜数字,三子棋,扫雷等小游戏我们都需要解决的问题:随机数的生成(其实是伪随机数的生成)

一.随机数的生成需要的库函数:rand,srand,time

int rand(void )
1.rand函数内部通过线性同余法实现,他并不是真的生成随机数,只不过因为其周期特别长,所以在一定范围内可看成随机的。
2…rand函数返回一个范围为0到RAND_MAX(0x7fff==32767)的伪随机整数()。在调用rand之前,使用srand()函数为伪随机数生成器设置种子即起点
3…头文件:#include <stdlib.h>
void srand(unsigned int)
1.参数类型为无符号整形
2.用于初始化rand()函数的起点。
3.头文件:#include <stdlib.h>
time_t time( time_t *timer );
1.time_t 是long long型,只不过被typedef重新命名了。
2…time函数根据系统时钟返回自1970年1月1日午夜(00:00:00)以来经过的秒数。返回值存储在计时器给出的位置中。这个参数可以是NULL,在这种情况下不存储返回值。
3.头文件:#include <time.h>

二.rand与srand的关系(随机数的生成)

image-20210804221927065

分析看到:

随机数固定不变了。这是因为rand生成随机数需要随机数种子(即起点),在未设置时默认种子为1,但是这样的默认会导致生成的随机数相同,若要不同,需要设置不同种子,这就需要借助srand()函数初始化起点。

image-20210804224317658

分析:

这样形式的设置种子,每次重新生成随机数仍是相同,因为其种子不变了(和默认1一样道理)。
这就需要我们每次都能改变种子,而时间可以满足我们的需求,对此我们通过时间戳的方法解决这个问题。

成功版

image-20210804230709442

1.srand函数的参数类型为unsigned
2.srand()是以时间戳设置随机种子的,如果我们将其放再循环中,可能在每次循环的时间差很小(毕竟是ms级的),导致我们设置了同一随机种子。

感言:本文是为了后面博文设计的。

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值