伪随机数的生成

简介:

@[TOC]

前言:

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

分析看到:

image-20210804224317658

分析:

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

成功版

image-20210804230709442

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

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

相关文章
|
6月前
|
设计模式 算法 程序员
伪随机数为什么叫伪随机数
伪随机数为什么叫伪随机数
72 1
|
7月前
|
算法 编译器 C语言
生成随机数
C语言中的`rand()`函数生成0-RAND_MAX间的伪随机数,需包含`stdlib.h`。序列重复因默认种子为1,可使用`srand(unsigned int seed)`初始化,通常结合`time(NULL)`设置种子以产生不同序列。`time()`函数从1970年至今的秒数(时间戳),包含于`time.h`,用于提供变化的种子。通过`rand() % b + a`可调整生成指定范围[a, b]内的随机数。
174 3
|
C++
如何在C++中生成随机数
在C++中,生成随机数是一个常见的技术需求。本文将介绍如何在C++中使用标准库来生成随机数。
226 0
Random生成伪随机数
Random生成伪随机数
86 0
|
JavaScript
[随机数详解]生成一个随机数,生成指定范围的随机数及随机数组去重
写在前面: 很早之前在简书写过几篇关于随机数的文章之前写的很乱,现在重新整理一下这些知识点。本文包含了如下这些知识点:js生成随机数,生成指定范围的随机数,获得不重复随机数组。 js生成随机数。 Math.random()——生成大于等于0.0且小于1.0的一个随机数; 通常我们生成随机数都是使用这个方法,这个方法返回值是一个伪随机选择的数,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,在该范围内(近似)均匀分布。
798 0
[随机数详解]生成一个随机数,生成指定范围的随机数及随机数组去重