- 编程
CSP复赛文件读写和对拍测试代码
- 2024-8-18 21:00:38 @
文件读写参考
A1001. A+B Problem(NOI系列比赛必做题)
对拍测试步骤: 例如,题目是输入n,求1+2+...+n的和是多少?
我们写了两种代码来对拍测试,样例如下:
第一步:创建测试数据(文件名保持为:indata.cpp)
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
int main(){
freopen("test.in","w",stdout);
mt19937 Rnd(time(0));
cout<<Rnd()%100000<<endl;
//cout<<Rnd()%(b-a+1)+a //生成[a,b]之间的随机数
fclose(stdout);
return 0;
}
第二步:暴力或者正确代码生成输出文件(文件名保持为:baoli.cpp)
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
int main(){
freopen("test.in","r",stdin);
freopen("baoli.out","w",stdout);
long long sum=0; int n;
cin>>n;
for(int i=1;i<=n;i++) {
sum+=i;
}
cout<<sum<<endl;
fclose(stdin);
fclose(stdout);
return 0;
}
第三步:你想测试的代码(文件名保持为:mycode.cpp)
#include <bits/stdc++.h>
using namespace std;
int main(){
freopen("test.in","r",stdin);
freopen("mycode.out","w",stdout);
int n,sum;//这里对拍的时候可以找到错误,需要定义long long
cin>>n;
sum=(1+n)*n/2;
cout<<sum;
fclose(stdin);
fclose(stdout);
return 0;
}
第四步:进行对拍测试(文件名保持为:pai.cpp)
#include <bits/stdc++.h>
#include <windows.h>//需要头文件
using namespace std;
int main(){
while(1){
system("indata.exe");//运行indata文件,indata是第一步代码的文件名
system("baoli.exe");//baoli.exe是第二步代码编译后的文件
system("mycode.exe"); //mycode.exe是第三步编译后的文件
if(system("fc baoli.out mycode.out /n"))//文本比较第二步和第三步运行后产生的输出结果是否相同,如果遇到不同则退出,并显示不同的行号和数据,根据找到的测试数据进行代码调试
break;
Sleep(1000);//每一轮需要间隔1000毫秒,以便生成不同的随机数,否则间隔时间太短会重复生成相同的随机数据,进行很多次无效的对拍测试
}
return 0;
}
进行第4次对拍测试的时候,找到一组不同的测试数据,此时的输入数据在test.in文件内,对应的输出不同点为第1行,这时就可以根据这组找到的测试数据,进行代码修改和调试。
以下还可以进行查看代码运行的估算时间:
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
int main(){
while(1){
system("indata.exe");
double begin = clock();//记录程序运行的起始时间
system("baoli.exe");
double end = clock();//记录代码运行的结束时间
cout<<"baoli:"<<end-begin<<endl;//输出程序运行时间
begin = clock();//记录程序运行的起始时间
system("mycode.exe");
end = clock();//记录代码运行的结束时间
cout<<"mycode:"<<end-begin<<endl;//输出代码运行时间
if(system("fc baoli.out mycode.out"))//对拍测试
break;
Sleep(1000);//每一轮需要间隔1000毫秒,以便生成不同的随机数,否则间隔时间太短会重复生成相同的随机数据,进行很多次无效的对拍测试
}
return 0;
}
上述四步骤均要存在同一个文件夹内,并且逐个编译运行。
每一步都编译运行后,文件夹内会产生以下文件:
1 条评论
-
gf22107 LV 5 @ 2024-10-20 19:56:06
Hi,comrade,r u ok?
- 1