产生随机数(输入)
RAND.cpp
// RAND.cpp
# include <cstdlib> // srand()、rand()
# include <ctime> // time()
# include <cstdio> // freopen()、fclose()
int main() {
freopen("in.txt", "w", stdout); // 将输出存储到文件(对拍用)
srand((unsigned)time(0)); // 使多次运行时产生不同的随机数
/* (所需输入数据的格式)
当输入格式为:第一行输入一个整数n(1<=n<=100),第二行输入n个整数(>=0且<= 100)
*/
int n = rand()%100 + 1; printf("%d\n", n);
for (int i = 1; i <= n; i ++) printf("%d ", rand()%101);
printf("\n");
/*
以上输入格式可根据需要自定义
*/
fclose(stdout); // 关闭文件输出
return 0;
}
对拍程序(Windows系统下)
假设test.cpp为需要测试的程序,baoli.cpp为确定正确(答案模板)的程序。
- 在test.cpp和baoli.cpp中添加文件输入语句,输入文件名为"in.txt";
- 使test程序输出到"test_out.txt"中,baoli程序输出到"baoli_out.txt"中(即添加文件输出语句);
- 分别编译RAND.cpp、test.cpp、baoli.cpp、COMPARE.cpp,形成对应的exe文件;
- 将以上4个exe文件放入同一文件夹中(文件夹中可以存在其他文件);
- 运行COMPARE.exe即可开始对拍。
COMPARE.cpp
// COMPARE.cpp
# include <cstdlib>
# include <ctime>
# include <cstdio>
int main() {
int T = 10000; // 设置运行次数
while (T --) {
system("RAND.exe");
double s = clock(); system("test.exe"); double e = clock();
system("baoli.exe");
if (system("fc test_out.txt baoli_out.txt")) {
puts("Wrong Answer"); return 0;
}
else printf("Accepted, %.0lfms\n", e-s); // 输出test.exe运行时间
}
}
当然,也可将需要测试的算法和确定正确的算法分别封装成函数,利用随机数作为输入(函数参数)在同一源文件中依次产生答案,并人眼判别是否相同。(输出较少时,该方法速度比使用COMPARE程序快)