C_C++随机数据生成(is how to use but not how it work)

2023-05-16

1.int rand(void)
库:stdlib.h
功能:随机数发生器,值在0至RAND_MAX之间,RAND_MAX定义在stdlib.h, 其值为2147483647
解释:首先不是真的随机数,只是周期比较长。然后如果不设置随机数种子默认是1.

2.void srand(unsigned int seed)
库:stdlib.h
功能:初始化随机数种子
解释:初始化种子,要不每次重新运行程序随机数是一样的。但是重新开始的时候种子仍然是原先设定,所以一般会和time()一起使用。

3.time_t time(time_t* t);
库:time.h
功能:取得从1970年1月1日至 t 的秒数
解释:time_t是long数据类型,前面用typedef重命名的。如果参数是空,默认是当前时间。


下面看具体使用:
1.最简单的生成随机数

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{
    for(int i=0;i <10;++ i)
        printf("%d ",rand());
    return 0;
}

简单随机数生成

2.结合time设置随机数种子

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{
    srand((unsigned int)time(NULL));

    for(int i=0;i <10;++ i)
        printf("%d ",rand());
    return 0;
}

每次不同的随机数
3.设定指定区域的随机数
思路:如果想得到[a,b]的随机数,等价于获得一个随机数n,将这个随机数和a相加,可以保证 a(rand的返回值[0,RAND_MAX]),接下来保证a+n bnba , rand()%(b-a)一定是一个[a,b)的整数(这里取不到b的原因是n的时候余0,所以n取不到)。
a+rand()%nx[a,a+n)
推广一下:
[a,b] a+rand()%(b-a+1)
(a,b] a+1+rand()%(b-a+1)
[a,b) a+rand()%(b-a)
(a,b) a+1+rand(b-a)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{
    srand((unsigned int)time(NULL));

    int a = 0,b = 0;
    printf("input a ans b:\n");
    scanf("%d%d",&a,&b);
    printf("get random number which range is [%d,%d]:",a,b);
    for(int i=0; i <10; ++ i)
        printf("%d ",a+rand()%(b-a+1));
    return 0;
}

指定范围

4.推广一下负数
首先设想一下负数,自然想到上述范围公式,如果将负数代入会怎样?例如我们想要得到[-7,5]之间的随机数,结果如图:
负数
其实上面我们已经证明了范围取值的正确性,负数显然是整数也是符合上述的规则的。
很容易想到 [,+] ,或者包含 的情况。这里我只讨论第一种情况,后面的以后又想瞎搞的时候在搞吧。
对于上面的范围,直接想到RAND_MAX/2减去产生的随机数。但是现实很残酷,竟然没有超过一半的!!!不知道原因,这里主要是为了利用上述的思想,我还是想到了一个办法,用一个随机数-随机数。(或者利用计算机存储数值的特点进行二进制左移操作也能得到负数,但是这是简单问题复杂化了)

5.推广一下小数
很容易用分治的思想将产生一个小数分解成产生一个随机整数和[0,1)的小数问题。产生指定整数上面讨论过了,只要知道了[0,1)的随机小数怎么产生就行了。
我们知道rand()产生的是[0,RAND_MAX]的整数,那么我们直接将这个数除以RAND_MAX不就得到了所需的随机小数!
分治完成,归并就可以推广到指定小数了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C_C++随机数据生成(is how to use but not how it work) 的相关文章

随机推荐

  • Python批量获取高校基本信息

    文章目录 前言一 需求二 分析三 处理四 运行效果 前言 为了更好的掌握数据处理的能力 xff0c 因而开启Python网络爬虫系列小项目文章 小项目小需求驱动 xff0c 每篇文章会使用两种以上的方式 xff08 Xpath Bs4 Py
  • Python爬取各大外包网站需求

    文章目录 前言一 需求二 分析三 处理四 总结 前言 为了更好的掌握数据处理的能力 xff0c 因而开启Python网络爬虫系列小项目文章 小项目小需求驱动总结各种方式 页面源代码返回数据 xff08 Xpath Bs4 PyQuery 正
  • Python获取重庆市农场品行情

    文章目录 前言一 需求二 分析三 运行 前言 本系列文章来源于真实的需求本系列文章你来提我来做本系列文章仅供学习参考 one Leave a message at the end of the article two Get wechat
  • Python获取中国大学MOOC某课程评论及其参与人数

    文章目录 前言一 需求二 分析三 运行结果 前言 本系列文章来源于真实的需求本系列文章你来提我来做本系列文章仅供学习参考 一 需求 1 课程参加人数 2 课程学员名称及其评论 二 分析 首先查看网页源代码是否有需要的数据 课程参加人数 课程
  • Python项目之中国数据可视化

    文章目录 关键词一 做什么二 怎么做1 获取数据 amp amp 处理数据2 数据库设计 amp amp 存储数据3 开发后端接口4 前端页面编写 三 效果展示四 总结 关键词 PythonDjangoPython网络爬虫echarts可视
  • 关于text段、data段和bss段

    根据APUE xff0c 程序分为下面的段 xff1a text data initialized bss stack heap data bss text text段在内存中被映射为只读 xff0c 但 data和 bss是可写的 bss
  • Android 穿山甲广告联盟接入

    一 SDK接入 参考官方接入文档 xff0c 基于穿山甲版本号 3 1 0 0 导入 aar 及 SDK 依赖的 jar 包 将本 SDK 压缩包内的 open ad sdk aar 复制到 Application Module libs
  • linux下的so、o、lo、a、la文件的区别

    o 编译的目标文件 a 静态库 xff0c 其实就是把若干o文件打了个包 so 动态链接库 共享库 lo 使用libtool编译出的目标文件 xff0c 其实就是在o文件中添加了一些信息 libtool主要的一个作用是在编译大型软件的过程中
  • TypeError: only size-1 arrays can be converted to Python scalars

    正在愉快写代码的我 xff1f xff1f xff1f xff1f xff1f xff1f xff1f xff1f xff1f xff1f xff1f 源代码也很简单 之后可以解决 xff0c 比如 再比如 xff1a 但是那样究竟为什么不
  • 隶属度函数

    隶属度函数 介绍 xff1a 定义 若对论域 xff08 研究的范围 xff09 U中的任一元素x xff0c 都有一个数A x 0 xff0c 1 与之对应 xff0c 则称A为U上的模糊集 xff0c A x 称为x对A的隶属度 当x在
  • python 统计 list 大于 某值/0 的数量

    在列表的处理中 xff0c 我们经常要统计大于某值的数量 xff0c 每次都要写一段长长的代码 xff0c 对于刷LeetCode的人来说是难以忍受的 xff0c 那么有没有一种方法 xff0c 可以直接不用循环 xff0c 或者一行代码可
  • 模糊综合评价-----层次分析法AHP

    模糊综合评价 层次分析法AHP 文首先读 xff1a 最近有个课题需要用到模糊综合评价 xff0c 笔者也是收集了各方资料 xff0c 最后发现某乎上的一篇文章 xff0c 简单 系统 详细的同时不乏简单易懂和深度见解 xff0c 这边li
  • 机器学习进阶之 时域/时间卷积网络 TCN 概念+由来+原理+代码实现

    TCN 从 阿巴阿巴 到 巴拉巴拉 TCN的概念 xff08 干嘛来的 xff01 能解决什么问题 xff09 TCN的父母 xff08 由来 xff09 TCN的原理介绍上代码 xff01 1 TCN xff08 时域卷积网络 时间卷积网
  • (单引号&双引号)‘s difference in C++

    单引号 amp 双引号 s difference in C 43 43 单引号 字符 实际上代表一个整数 双引号 字符串 是一个指向无名数组起始字符的指针 以 0 结尾 代码1 xff1a int main string s1 s1 61
  • 国企程序员的幸福指数

    国企程序员的幸福指数 几万行代码 xff01 我怎么看 xff1f 我有问题想你询问 xff0c 你语气总是那么不耐烦 xff0c 让我去看文件 看代码 先了解代码再说 xff0c 我问你个问题 xff0c 你总觉得那么幼稚 xff0c 靠
  • win32+win64+linuxi686+linuxx86_64不同数据类型所占位数

    win32 43 win64 43 linuxi686 43 linuxx86 64不同数据类型所占位数
  • 使用protobuf进行序列化时遇到的几个问题

    问题1 向一个string bytes字段设置参数时 xff0c 调用set str xff0c 在SetNoArena 处出现问题 xff0c 程序卡死 原因分析及解决 第一 xff0c 可能是 proto文件中字符串的类型不正确 可以尝
  • Python中报错:"IndentationError: unexpected indent"的原因分析和解决方法

    Python中报错 xff1a 34 IndentationError unexpected indent 34 的原因分析和解决方法 34 IndentationError unexpected indent 34 的原因分析和解决方法
  • Qt封装C++11 随机数

    头文件 xff1a include lt random gt dkrandom h ifndef DKRANDOM H define DKRANDOM H include lt QObject gt include lt random gt
  • C_C++随机数据生成(is how to use but not how it work)

    1 int rand void 库 xff1a stdlib h 功能 xff1a 随机数发生器 xff0c 值在0至RAND MAX之间 xff0c RAND MAX定义在stdlib h 其值为2147483647 解释 xff1a 首