关于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; 

效果如图