如何测出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
先出已经成功的截图
很明显这个点的数据是a=99,b=100

那怎么一步一步猜到呢
首先
在这里插入图片描述目光牢牢的锁住测试点9,这一次我们测a是否<=400
从报错结果来看,是的,因为如果a>400,那应该给的是运行超时错误

在这里插入图片描述依旧关注测试点9,这次我们测试a是否小于等于50,显然a>50,因为如果小于等于50,应该报的是“答案错误”

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

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

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

那么
在这里插入图片描述我们就确定了这一组的测试数据

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

题目中会给出n,m,k
接下来m行,每行是2个数据
然后再来一行,给出k个数据
在这里插入图片描述
同样的办法,我们如果测出了n,m,k,就知道接下来到底有多少数据,可以一个一个测出来,虽然很费时间。

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

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

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值