① 暴力代码和待测代码处理
将暴力代码和待测代码都放到同一个文件夹中,即$daice.cpp$和$baoli.cpp$,然后分别运行这两个$cpp$文件,生成两个$exe$文件$baoli.exe$和$daice.exe$。
暴力代码和待测代码数据读入为从同一个$input.txt$文件中读入。输出结果放到各自的$baoli.txt$和$daice.txt$中。
即暴力代码:
#include<bits/stdc++.h>
int main()
{
freopen("input.txt", "r", stdin);
freopen("baoli.txt", "w", stdout);
... // 代码逻辑
return 0;
}
待测代码:
#include<bits/stdc++.h>
int main()
{
freopen("input.txt", "r", stdin);
freopen("daice.txt", "w", stdout);
... // 代码逻辑
}
② 调试代码处理
再写一个用来比较这两种代码运行结果不同之处的文件$main.cpp$。在$main.cpp$文件中生成随机数据,将数据输入到$input.txt$,然后再调用$baoli.exe$和$daice.exe$去接收$input.txt$中的数据并输出到$baoli.txt$和$daice.txt$,最后一直比较这两个输出文件,不同的时候$break$,即获得错误数据。
#include<bits/stdc++.h>
#include<ctime>
using namespace std;
void create_data()
{
ofstream fout("input.txt"); // 文件输出流
// 生成数据逻辑
int n = rand() % 30 + 1, m = rand() % 1000 + 1;
fout << n << ' ' << m << endl; // 将"n m"输出到"input.txt"文件
fout.close(); // 关闭文件
}
bool work()
{
create_data(); // 生成随机数据
system("daice.exe"); // 执行待测exe文件
system("baoli.exe"); // 执行暴力exe文件
return !system("fc baoli.txt daice.txt"); // 比较两种输出的区别
}
int main()
{
srand(time(0)); // 随机数种子
for (int i = 0; i < 10010; i ++) // 测试10010次
if (!work()) break; // 找到错误数据就停止
return 0;
}
③ 注意点
- 每次更改代码要重新生成exe文件~,不然改了跟没改一样…
- 随机数据范围根据题目中的来
<ctime>
在<bits/stdc++.h>
里没有,要单独加入