关于oj造数据主要用到的就是随机函数和文件流
1.随机函数是rand(),头文件为<cstdlib>
用法: int res = rand()%b + a;
res是从a开始(包括a)连续数b个数这个区间中的一个随机数,( res = [a,b) );
需要注意的是如果不设置随机种子的话,那么每次随机出来的数是一样的
设置随机种子函数srand();头文件<cstdlib>;
这里我们用时间作为随机种子,因为程序运行很快,而时间是以秒为单位的,所以我们要用到Sleep(1000);
代码如下
#include<stdio.h>
#include<cstdlib>
#include<ctime>
#include<windows.h>
using namespace std;
int main()
{
for(int i = 1; i <= 10; i++)
{
srand(unsigned (time(NULL))); //time()函数的头文件为<ctime>
Sleep(1000); //Sleep()的函数头文件为<windows.h>
int res = rand()%10 + 1;
printf("%d\n",res);
}
return 0;
}
2.文件流
头文件为<fstream>
ofstream outfile(str,ios::out);是将该文件下名为str的文件和输出流outfile绑定,并以输出(写)的方式打开文件;
如果不存在名为str文件,该函数会先创建一个这样的文件,然后在绑定;
也可以先创建一个输出流,之后再文件绑定,例如:
ofstream outfile;
outfile.open(str,ios::out);
有时我们要批量创建文件,这时我们可以用ofstream数组;
但是我们的文件名需要不一样,例如我们想要创建如下的文件:
代码如下:
#include<stdio.h>
#include<string>
#include<fstream>
using namespace std;
int main()
{
ofstream DataIn[100]; //一个输出流数组
ofstream DataOut[100];
for(int i = 1; i <= 10; i++)
{
string index = to_string(i); //将i转换为string型
string strIn = "TestData" + index + ".in"; //输入数据文件名
string strOut = "TestData" + index + ".out"; //输出数据文件名
DataIn[i].open(strIn,ios::out);
DataOut[i].open(strOut,ios::out);
}
return 0;
}
效果如图:
对文件输出流读写和输出流读写是一样的’
例如
string str = "15445";
DataIn[1]<<str<<" "<<"12"<<35<<endl;
效果如图