【算法基础七】深入了解---随机种子与随机数

​​​​​​​✅作者简介:大家好,我是新小白2022,让我们一起学习,共同进步吧!🏆
📃个人主页:新小白2022的CSDN博客
🔥系列专栏:算法基础入门
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

系列文章目录

算法学习打卡

第一章  字符编码分类(算法基础一)

第二章   双飞本科学习动力,方向(算法基础二)

第三章   零基础入门算法应该学些什么(算法基础三)

第四章  小项目实战(通讯录管理系统) 

第五章 项目实战自我总结

第六章  快捷键操作(单行/多行注释) 

第七章  随机种子与随机数(冷知识)


前言 

rand() 函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。参考优秀文章

一、C++ rand 与 srand 的用法

1、函数rand( )功能及用法

功能 :  随机数发生器

用法:

           int rand(void)

头文件: stdlib.h

rand() 返回一随机数值的范围在 0 至 RAND_MAX 间。RAND_MAX 的范围最少是在 32767 之间(int)。用 unsigned int 双字节是 65535,四字节是 4294967295 的整数范围。0~RAND_MAX 每个数字被选中的机率是相同的。

用户未设定随机数种子时,系统默认的随机数种子为 1。

rand() 产生的是伪随机数字,每次执行时是相同的; 若要不同, 用函数 srand() 初始化它。

2、函数srand( )功能及用法

功能:  初始化随机数发生器

用法: 

void srand(unsigned int seed)

头文件:stdlib.h

srand() 用来设置 rand() 产生随机数时的随机数种子。

参数 seed 必须是个整数,如果每次 seed 都设相同值,rand() 所产生的随机数值每次就会一样。

二、使用当前时钟作为随机数种子

rand() 产生的随机数在每次运行的时候都是与上一次相同的。

若要不同, 用函数 srand() 初始化它。可以利用 srand (unsigned int)  time(NULL)  ) 的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。

1、产生随机数的用法

  • 1) 给srand()提供一个种子,它是一个unsigned int类型;
  • 2) 调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);
  • 3) 根据需要多次调用rand(),从而不间断地得到新的随机数;
  • 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步"随机化"rand( )的输出。

0~RAND_MAX 之间的随机数程序

#include<iostream>
#include<stdlib.h>
//#include<cmath>
#include<ctime>
//#include<time.h>
using namespace std;

int main()
{
    //产生1~100的随机数
    srand((unsigned int)time(NULL));
    int num = rand()%100 + 1;    //本来是从0~99,表达式+1后范围改变!
    cout << num << endl;
    
    system("pause");
    return 0;
}

 三、写在最后

产生一定范围随机数的通用表示公式(含指定位数

要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;

要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;

要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;

通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。

要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。

要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。

若生成指定位数的随机数,比如生成3位随机数。可看作生成 [ 100 , 1000 ) 范围

如果还想拓展学习----优秀博文

有介绍---随机数引擎类

随机数分布类----产生均匀分布的实数 

                          产生正态分布的实数

                          生成二项分布的布尔值

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值