• 随机数


    前缀芝士--随机数

    既然要使用对拍,那我们肯定要学会造数据,要是简简单单的数论题,只让你输入一个/两个整数的题,你可以很自然的造上好多组数据,要是图论,树论,你要怎么办呢??

    那这里,我来介绍一种利用c++生成随机数的方法吧

    //首先是头文件,
    #include<cstdlib>
    #include<ctime>
    #include<cstdio>
    

    第一个cstdlib是随机数的必要文件,我们待会要用的rand,srand都在里面.

    第二个ctime是为了应对生成的数够随机.

    第三个就是简单的输入输出了

    下面才是生产随机数的精髓

    int main()
    {
        srand((unsigned)time(0));//把时间当作一个种子喂进去
        ....
    }
    

    这一步就是我们要用到ctime头文件的原因

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

    接下来是一些简单的操作

    int n=rand()%m;//表示n是一个从0--m-1的一个数
    int n=rand()%m+1//n=[1,m];
    int n=rand()%(m+1)//n=[0,m];
        
    int n=rand()%100+1;
    int m=10000;
    for(int i=1;i<=n;i++)
    {
        a[i]=rand()%m+1;
    }//整数序列
    
    for(int i=1;i<=m;i++)
    {
        int l=rand()%100+1;
        int r=rand()%100+1;
        if(l>r) 
        swap(l,r)
    }// 整数区间
    

    至于生产图和树吗(这里给出树的生成,图自己去想)

    for(int i=2;i<=n;i++)
    {
        int fa=rand()%(i-1)+1;
        int val=rand()%100001+1;
        printf("%d %d %d",i,fa,val);
    }
    

    这就是生成随机数了,也是自己出题的关键,主要是手造数据实在是太慢了!!!

    (这才是用来造数据的啊!!!!)

  • 相关阅读:
    Linux文件查找
    Linux之正则表达式
    linux文本处理
    Linux压缩归档管理
    spring-security问题记录
    mybatis-plus&springboot
    Mysql8- Public Key Retrieval is not allowed
    MySQL 5.7安装(linux)
    git把本地代码上传(更新)到github上
    linux相关(find/grep/awk/sed/rpm)
  • 原文地址:https://www.cnblogs.com/--840-114/p/13541443.html
Copyright © 2020-2023  润新知