C/C++ 随机数与对拍

产生随机数(输入)

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程序快)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值