对数器技巧
标签: 机试攻略 - 满分篇
学习人数: 8.5k


高清播放
赞赏支持

大多数同学应该都有过这样的经历...

这道题我做了半天怎么还是错的啊,看了别人正确的代码跟我的差不多啊,我到底错在哪里了啊?抓狂...

然后开始疯狂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++)  
      ...
登录查看完整内容


课后作业

掌握对数器技巧


登录后开始许愿

暂无评论,来抢沙发