对拍

news/2024/11/28 17:01:24/

【本文毒性较大,建议阅读续文:C++对拍】

很多时候,我们或许有一个标程(或者爆搜程序什么的,反正答案是对的),一个自己的程序,然而一组一组的数据经过我们的手动输入后并没有什么问题,可就是有错……

咋办,一个一个输数据得到什么时候啊,于是,一个很“高端”的东西诞生了——对拍。

 

对拍是什么?简单说就是把两个程序对于同一个输入的输出进行比较,没有问题就再来,有问题就停下来,你就可以找到你程序的问题所在了

 

对拍,需要4个东西:你的程序,答案正确的程序,一个数据生成器,和一个对拍器。

你的程序和答案正确的程序不多说,数据生成器讲讲(知道直接跳过这里):

通常,一个程序的数据一个一个想很累,所以,我们就可以用数据生成器,用来生成随机数据(才能保证数据不同)。

 

怎么生成随机数呢?很简单:

 

#include<cstdio>
#include<ctime>
#include<cstdlib>//这两个头文件不可少
int main()
{srand(time(NULL));//程序开头写上这一句printf("%d %d\n",rand()%10,rand()%10);
}


上面的程序就是随机输出两个0-9之间的整数

 

 

为什么是0-9之间?

rand()就是生成一个随机数(由于前面的一句是以time为标准,所以rand()会根据时间生成一个正整数,自然不会一样),但是它有可能会很大,所以我们通常在后面mod一个数,如果想从1开始,就在后面加一个1,2开始就加2……

 

随机数就是这些了,接下来讲怎么写对拍程序。

 

首先,我们知道运行源代码后会有一个exe文件,把要对拍的两个程序生成的exe文件放在一个文件夹中。

如:

 

/*待对拍程序1.cpp*/
#include<cstdio>
int main()
{int a,b;scanf("%d%d",&a,&b);printf("%d",(3*a+3*b)/3);
}

 

/*待对拍程序2.cpp*/
#include<cstdio>
int main()
{int a,b;scanf("%d%d",&a,&b);printf("%d",a+b);
}


好的,就这两个程序了(不要说我无耻,临时打一个,打长了麻烦)。

 

然后编译运行一次,就有了这个:

将后两个放在一个文件夹中:

再做一个数据生成器,用同样的办法将它的exe文件放在这个文件夹中:

 

/*数据生成器:用于生成2个0-1000的整数*/
#include<cstdio>
#include<ctime>
#include<cstdlib>
int main()
{srand(time(NULL));printf("%d %d\n",rand()%1000,rand()%1000);
}


然后找到exe文件放入:

 

 

接下来就是对拍程序了,这里用c++来写(其实是一样的,只是用system来执行windows命令):

 

#include<iostream>
#include<windows.h>
using namespace std;
int main()
{int t=1000;while(--t){system("data.exe > data.txt");system("1.exe < data.txt > 1.txt");system("2.exe < data.txt > 2.txt");if(system("fc 2.txt 1.txt"))break;}  if(t==0)cout<<"no error"<<endl;elsecout<<"error"<<endl;return 0;
}  


这个适用于刚刚的那个1.exe,2.exe,data.exe,如果你的文件名和我不一样,下面有模板:

 

 

#include<iostream>
#include<windows.h>
using namespace std;
int main()
{/*这个是有对拍次数的*/int t=这里是检查(对拍)次数;while(--t){system("这里写数据生成器名称.exe > 这里写数据生成器名称.txt");system("这里写程序1名称.exe < 这里写数据生成器名称.txt > 这里写程序1名称.txt");system("这里写程序2名称.exe < 这里写数据生成器名称.txt > 这里写程序2名称.txt");if(system("fc 这里写程序2名称.txt 这里写程序1名称.txt"))break;}if(t==0)cout<<"no error"<<endl;elsecout<<"error"<<endl;/*下面这个没有对拍次数,直到错了为止*//*while(1){system("这里写数据生成器名称.exe > 这里写数据生成器名称.txt");system("这里写程序1名称.exe < 这里写数据生成器名称.txt > 这里写程序1名称.txt");system("这里写程序2名称.exe < 这里写数据生成器名称.txt > 这里写程序2名称.txt");if(system("fc 这里写程序2名称.txt 这里写程序1名称.txt"))break;}*/return 0;
}


运行结果:

 

文件夹内是这样的:

如果对拍显示有问题,就直接打开data.txt,里面有数据,1.txt和2.txt中分别是你程序1的答案和程序2的答案。

 

如果你的对拍程序一出错就关闭了,就在return 0前加一个getchar(),让程序停一下,头文件:cstdio

改动一下测试程序,让它出现错误,就会这样了。


http://www.ppmy.cn/news/287907.html

相关文章

相机·平场校正( Flat Field)..Balance White

原理 参考博文&#xff1a;https://blog.csdn.net/pamxy/article/details/8938412 理想情况下, 当相机对均匀的目标成像时, 得到图像中所有像素点的灰度值理论上应该是相同的. 然而, 实际上图像中各像素的值往往会有较大差异. 这一般是由以下几个原因造成: &#xff08;1&am…

相机标定 笔记

相机标定的目的&#xff1a;建立三维世界坐标与二维图像坐标之间的一种对应关系。 1.在单目视觉中&#xff0c;这种对应关系是一对多的对应&#xff0c;即二维图像上一个像素对应着三维空间中的一条直线&#xff1b; 2.在双目视觉中&#xff0c;可以通过两幅二维图像上的对应…

“拍一拍”真的只是“拍一拍”么?

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 最近微信的”拍一拍“功能上线后&#xff0c;就被大家玩坏了。各种拍的文案应运而生&#xff0c;什么”拍了拍裤裆说&#xff0c;怎么这么小“&#xff0c;”拍了拍…

img-polaroid_创建照片的宝丽来效果

当照片像拍立得照片一样显示时&#xff0c;它们通常会更加有趣。 了解如何通过向其添加逼真的宝丽来效果将普通照片变成更生动的东西。 建立基地 1.创建一个新的空白画布&#xff0c;分辨率约为800600&#xff0c;并用白色[#ffffff]背景填充。 2使用半径为2px的圆形矩形工具在…

相机标定(Camera calibration)

简介 摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程&#xff0c;也就是求最终的投影矩阵 P P P 的过程&#xff0c;下面相关的部分主要参考UIUC的计算机视觉的课件&#xff08;网址Spring 2016 CS543 / ECE549 Computer vision&#xff09;。 …

国旗拍立得APP隐私政策

拍立得APP隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务&#xff0c;本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外&#xff0c;在未征得…

Allied Vision相机

简介 Allied Vision相机图像采集处理。Vimba是Allied Vision推出的极具前瞻性的独立软件开发工具包&#xff08;SDK&#xff09;&#xff0c;适于所有配备GigE Vision、USB3 Vision、IEEE 1394和Camera Link接口的Allied Vision相机。通过Vimba&#xff0c;您可以轻松控制Allie…

咔嚓冲印: 用IPHONE冲印LOMO卡片和明信片

咔嚓冲印 是一个基于iPhone平台上的冲印服务&#xff0c;方便用户随手拍、随手印&#xff0c;享受拍立得的快感。 咔嚓冲印 是一个基于iPhone平台的网上数码照片冲印服务&#xff0c;方便用户随手拍、随手印&#xff0c;享受拍立得的快感。咔嚓冲印 提供高质量的相纸和包装&…