实用对拍

对拍

对拍是干什么的呢?就是当你在考场上还剩下很多时间,但是你又不知道你打的程序是不是正解,有没有打错细节,那么这时候就可以用对拍来搞一搞。

举个例子

比如说这是我在考场上打的一个程序(求 12+22+......n2 的值)
自认为是正解的程序。
pascal选手看这里(a.pas)

var
        n:longint;
begin
        readln(n); 
        writeln(n*(n+1)*(2*n+1) div 6);
end.

c++选手看这里(a.cpp)

#include<cstdio>
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d",n*(n+1)*(2*n+1)/6);
}

又假设我写了这样一个暴力,
pascal:(b.pas)

var
        n,sum,i:longint;
begin
        readln(n);
        for i:=1 to n do
        begin
                sum:=i*i+sum;
        end;
        writeln(sum);
end.

c++(b.cpp)

#include<cstdio>
int main()
{
    int i,n;
    long int sum = 0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        sum += i*i;
    }
    printf("%d\n",sum);
    return 0;
}

然后还有一个出数据的程序
pascal:(data.pas)

var
        n:longint;
begin
        randomize;
        writeln(random(100));
end.

c++:(data.cpp)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
 int n;
 srand((int)time(0));  //调用srand()函数,以系统时间为随机种子
 n = 1 + rand()%100;  //随机生成一个1100的自然数
 printf("%d\n",n); // 输出随机生成的自然数
 return 0;
}

然后将上面的三个程序编译运行,生成exe可执行文件。
然后将这三个exe可执行文件放入同一个文件夹中。接下来我们就需要另一个奇妙的东西

@echo off  
:loop  
    data.exe>data.in  
    b.exe<data.in>b.out
    a.exe<data.in>a.out  
    fc a.out b.out  
if not errorlevel 1 goto loop  
pause  
goto loop

首先把这个玩意放在judge.txt中(当然你也可以不用judge,叫其他名字都可以),注意judge.txt要和上面三个exe可执行文件放在一起,然后将judge.txt的扩展名该为bat,然后点击打开judge.bat即可。
如果发现错了怎么办,可以发现在这个文件夹中有一个data.in文件就是用来记录每一次data.exe生成的数据。然后直接用data.in中的数据进行调试即可。从a.in和b.in中分别看错误的答案正确的答案,若要将a.exe改为其它的,只需将上面的代码改成这样,假设将a改为c。

@echo off  
:loop  
    data.exe>data.in  
    b.exe<data.in>b.out
    c.exe<data.in>c.out  
    fc c.out b.out  
if not errorlevel 1 goto loop  
pause  
goto loop

the end

由于我实在是太垃圾了,难免会写错,希望大家批评指正,多多包容,thank you for your patience.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值