大多数同学应该都有过这样的经历...
这道题我做了半天怎么还是错的啊,看了别人正确的代码跟我的差不多啊,我到底错在哪里了啊?抓狂...
然后开始疯狂diss管理员,管理员在吗?你这个小破站,为什么不能告诉我是哪一组数据出错了?你有没有考虑过我们这种新手的感受?你看看别人某站,错误还会给我反馈错误的数据,你们是不是技术不行啊?
管理员的无奈:大部分题目的极限数据都是上千上万行,反馈给你也没用的,你要花大量的时间去查找去比较,还不如再认真检查一下代码。
但是,当你学会这一节的内容之后,这一切的烦恼都不存在了。
使用对数器进行对拍,可以快速的找到的你的代码错误所在。
简单说,就是将你的代码和正确的代码放在一起,然后随机生成一些符合题目的要求的数据,然后比较你的代码的输出结果和正确代码的输出结果是否一致,从而来验证你的代码的正确性。
当然,随机的数据越多,正确性也就越高。
下面我们举个排序的例子
我自己写了一个排序的算法,但是我不知道我写的这个排序算法到底有没有问题,但是我拿到别人的正确的排序的算法代码,我如何比较呢?
我的排序算法代码
for (int i = 1; i <= n; i++)
for (int j = 1; j < n; j++)
if (b[j] > b[j+1])
swap(b[j], b[j+1]);
正确的排序算法代码
sort(c+1, c+n+1);
下面就是完整的对数器使用的模板
#include <bits/stdc++.h>
using namespace std;
struct node {
int a[105];//随机的数
int b[105];//我的方法排序后的数
int c[105];//正确的方法排序后的数
int n;
// 按照题意随机一些输入数据
void Rand() {
n = rand()%100 + 1;
for (int i = 1; i <= n; i++)
a[i] = rand()%10000;
}
// 使用我的解法得到的答案
void My_method() {
for (int i = 1; i <= n; i++)
b[i] = a[i];
for (int i = 1; i <= n; i++)
for (int j = 1; j < n; j++)
if (b[j] > b[j+1])
swap(b[j], b[j+1]);
}
// 使用其他正确的解法得到的答案
void Right_method() {
for (int i = 1; i <= n; i++)
...
掌握对数器技巧
登录后开始许愿
暂无评论,来抢沙发