算法练习工具之代码对拍

练习算法时,很多时候可以将自己的代码跟网上提供的标准代码比对,既可以学习别人的写法,另外也可以找出自己代码存在的问题,方便调试。对拍就是一种很好的调试代码的方式。

对拍总共需要提供4份文件:

  1. 标准代码:std.cpp
  2. 自己的代码:my.cpp
  3. 随机数生成器:rand.cpp(用于为代码提供输入)
  4. 批处理程序:对拍.bat (使上述3分代码跑起来,前提是以上3份代码已经编译,rand生成随机数为1和2提供数据,1和2输出结果并比对输出)

如果std.exe和my.exe输出结果一致,则输出:无差异,并继续循环执行,否则:输出两份代码的不同结果,程序执行结束。 此时我们要调试自己的代码需要知道当前输入,输入数据就存在data.in中,可以直接取出来调试代码。
对拍.bat如下所示:

@echo off  
:loop  
    rand.exe>data.in  
    std.exe<data.in>std.out
    my.exe<data.in>my.out  
    fc my.out std.out  
if not errorlevel 1 goto loop  
pause  
goto loop

下面举个简单的例子,求两个数的商,结果保留两位小数。
1 my.cpp

#include <cstdio>
int main(){
	int a,b;
	while (~scanf("%d%d", &a, &b)){
		printf("%d\n",a/b);
	}
	return 0;
}

2 std.cpp

#include <cstdio>
int main(){
	int a,b;
	while (~scanf("%d%d", &a, &b)){
		float res = a*1.0/b;
		printf("%.2f\n",res);
	}
	return 0;
}

3 rand.cpp

#include <ctime>
#include <iostream>
using namespace std;
int main(){
	srand(time(0));
	printf("%d %d",rand()%20,rand()%20);
	return 0;
}

接下来现将上述3份代码编译,得到3个可执行文件并和对拍.bat放置于同一个文件夹下。然后点击 对拍.bat执行即可。
某一得到的结果如下所示:

正在比较文件 my.out 和 STD.OUT
***** my.out
0
***** STD.OUT
0.75
*****

我们可以看看data.in中的数据为:

12 16

因此,我们可以发现,my.cpp中得到的结果是整数而不是浮点数造成当前的问题。使用过程中,其实复杂的地方在于有些数据造起来很麻烦,尤其对于较复杂的问题,如图论中的某些问题等。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Researcher-Du

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值