如何测出PAT 测试点的测试数据?

前些天刷PAT,突然觉得,PAT给出的错误种类有很多,也许我可以通过错误种类的区别来做点什么。比如:得到他的原始数据?

接下来说说的我基本想法

int main() {
    int a;
    scanf("%d",&a);
    if(a<=100){
        printf("test");
    }
    else{
        while(1);
    }
    return 0;
}

这就是我的基本想法
我们得到测试数据的第一个数字,然后根据它是否小于等于100

我们会得到两个不一样的错误
1.如果a是<=100的,会报“答案错误”
2.如果a>100,会报“运行超时”,因为我们给的就是一个死循环(基于这个基本思路,其实我们也可以利用别的错误,如数组越界,内存溢出等错误)

接下来我随便找了一个简单的题目,做个示范,题目地址如下

1001 A+B Format
比如这个题我想测 测试点9
先出已经成功的截图
如何测出PAT 测试点的测试数据?_第1张图片很明显这个点的数据是a=99,b=100

那怎么一步一步猜到呢
首先
如何测出PAT 测试点的测试数据?_第2张图片目光牢牢的锁住测试点9,这一次我们测a是否<=400
从报错结果来看,是的,因为如果a>400,那应该给的是运行超时错误

如何测出PAT 测试点的测试数据?_第3张图片依旧关注测试点9,这次我们测试a是否小于等于50,显然a>50,因为如果小于等于50,应该报的是“答案错误”

由此两次的错误代码提交,我们把a的范围锁定在了(50,400】

那么通过2分法的手段,我们最后可以确定a的值,这边我已经试好了,a=99

同样的道理我们开始测试b的值
如何测出PAT 测试点的测试数据?_第4张图片通过前面的步骤我们已经知道了a=99,那么if的前面条件必然是true,所以,这个报错告诉我们,b的范围在(-10^6,300]之间,若干次错误提交以后,可以确定b=100

那么
如何测出PAT 测试点的测试数据?_第5张图片我们就确定了这一组的测试数据

其实这个方法还挺万能的,几乎测出所有题目的数据
pat 1013 Battle Over Cities
比如说这个,一到图算法的题目
先不论内容是什么

题目中会给出n,m,k
接下来m行,每行是2个数据
然后再来一行,给出k个数据
如何测出PAT 测试点的测试数据?_第6张图片
同样的办法,我们如果测出了n,m,k,就知道接下来到底有多少数据,可以一个一个测出来,虽然很费时间。

同样的道理,基本上大部分PAT的题目都可以测出它的测试数据

以上方法,献给因为某个测试点卡住,百思不得其解的同学们,希望大家共同进步

你可能感兴趣的:(编程语言,算法,c++,c语言)