【紫书】 让我来告诉你,如何使用对拍去寻找错误数据点。

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.txtstdout.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
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值