前缀芝士--随机数

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

那这里,我来介绍一种利用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);
}

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

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

posted on 2020-08-21 15:46  月下诺  阅读(566)  评论(0编辑  收藏  举报

Live2D