1.生成随机数数据点(依据题目生成数据点)
#include<iostream>
#include<ctime>
using namespace std;
double random(double a, double b)///随机数产生器,其范围为[a,b);
{
return a + (b - a) * rand() / (RAND_MAX + 1.0);
}
int main() {
srand((unsigned)time(NULL)); // 生成随机种子
random(1, 100);
int a = random(1, 800);
int b = random(1, 800);
cout << a << " " << b << endl;
return 0;
}
找到exe
文件, 改为gen.exe
devC++ 在源代码文件夹处就可以看到
VS 在源代码的文件夹的Debug中可以看到
接下来写两份代码,一份是可能有错的代码,一份是正确的代码,分别运行后会自动生成对应的exe
文件。
2.写上自己的代码找到DEBUG里面的exe
文件
例: (错误的a + b 代码)
改名为 my.exe
#include<iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if (a >= 500 && a <= 900 && b >= 500 && b <= 900) cout << a - b << endl;
else cout << a + b << endl;
return 0;
}
3.写上一份暴力的代码(必定对的代码, 但是会超时)
例: (正确的 a + b 代码)
改名为std.exe
#include<iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}
4.编写对拍启动文件run.bat
新建文本文档,写入以下内容后将其改名为.bat
后缀
这些名字可以任意取,只要和这个文件中的一一对应就行。
@echo off
:loop
gen.exe > in.txt
my.exe < in.txt > myout.txt
std.exe < in.txt > stdout.txt
fc myout.txt stdout.txt
if not errorlevel 1 goto loop
pause
首先会运行1中的代码生成随机数据到in.txt
中,
接着运行my.exe
读取in.txt
中的数据,然后输出到myout.txt
接着运行std.exe
读取in.txt
中的数据,然后输出到stdout.txt
最后将myout.txt
和 stdout.txt
进行对比
如果没有报错则跳到loop语句继续执行,直到找到一组不同的数据。
输出两份文本内容,结束停止。
建议先复制以上的代码走一遍流程后再去变化用自己的代码去找错误数据。
如何批量生成数据呢?
@echo off
set t=10
:loop
gen.exe > %t%.in
std.exe < %t%.in > %t%.out
set /a t-=1
if %t% neq 0 goto loop
pause