顺德微信网站建设,给企业做网站怎么收钱,网页设计实训报告不足,网站没有百度快照参考博客 晚上不想刷题。。无聊的开始研究对拍 以前oi的时候看过对拍#xff0c;奈何当时水平太差根本用不上对拍#xff0c;#xff08;现在水平也不咋地。。#xff09; 上面那个博文讲的非常好。。 对拍最终的就是 对拍程序.bat
首先第一步#xff1a;生成一组输入数据…参考博客 晚上不想刷题。。无聊的开始研究对拍 以前oi的时候看过对拍奈何当时水平太差根本用不上对拍现在水平也不咋地。。 上面那个博文讲的非常好。。 对拍最终的就是 对拍程序.bat
首先第一步生成一组输入数据。 我们假设你已经写好了一个数据生成器编译成rand.exe并放在当前目录下了那么我们只要把这个程序的输入重定向到一个文件就行了如果你直接在源码里操作还得各种文件流重定向烦得要死。在批处理命令里很简单就一句话
rand.exe in.txt是不是很简单明了 那怎么把文件输入到一个程序里去呢没错
my.exe in.txt
std.exe in.txtmy.exe是你写的错误程序std.exe是标程 那怎么把两个程序的输出再重定向到文件里去呢也很简单
my.exe in.txt myout.txt
std.exe in.txt stdout.txt是不是相当方便 接下来就是比较myout.txt和stdout.txt了也不用你手写判断程序windows自带一个比较命令fc(file compare)
fc myout.txt stdout.txt如果两个没有差异会显示找不到差异否则会显示不同的附近的几行的文本。
汇总一下
rand.exe in.txt
my.exe in.txt myout.txt
std.exe in.txt stdout.txt
fc myout.txt stdout.txt好这样一个简易版对拍程序就写好了。但这个功能也太简陋了只能对拍一次要是数据难找点岂不是要你运行到手酸 有人就问了能不能循环答案是可以
echo off
:loop rand.exe in.txtmy.exe in.txt myout.txtstd.exe in.txt stdout.txtfc myout.txt stdout.txt
if not errorlevel 1 goto loop
pause
goto loop别懵逼一行行给你解释。 首先echo off 是关掉输入显示不然你的所有命令都会显示出来的防止刷屏。 loop是定位标记点和c语言里的goto很像。 中间是主体程序。 if not errorlevel 1 goto loop errorlevel 是上一个命令的返回值fc在文件不同时返回1相同时返回0这一行的意思就是如果fc返回的不是1就跳到:loop使劲循环。 pause暂停一旦fc返回1就会执行到这一行停住程序给你时间看数据。 goto loop看完数据按下任意键结束暂停继续循环。
这样一来功能就顿时强大起来了为了纪念这么伟大的改进我们把文件名重命名为普通版对拍程序.bat。网上流传的也大多就这个版本了
优化版本 我这里用stringstream把字符串转换成整数你们也可以用其他办法。
#includebits/stdc.h
using namespace std;
#define random(a,b) ((a)rand()%((b)-(a)1))stringstream ss;int main( int argc, char *argv[] )
{ int seedtime(NULL);if(argc 1)//如果有参数{ss.clear();ssargv[1];ssseed;//把参数转换成整数赋值给seed}srand(seed);//以上为随机数初始化请勿修改//random(a,b)生成[a,b]的随机整数//以下写你自己的数据生成代码 printf(1\n);int n10;int mrandom(1,20);printf(%d %d\n,n,m);for(int i0 ; in ; i){printf( %d ,random(0,m));}printf(\n);return 0;
}