怎样排查答案错误(WA)
当你的程序通过编译之后,往往也会面临各种各样的答案错误。这里给大家介绍一些常见的,查找答案错误的方法。
首先,如果你输出的答案特别奇怪,比如一直都是 0,或者输出了一个很大的数之类的,一般有下面几种情况:
- 你的 scanf 和 printf 使用了错误的占位符,比如用 %d 输入了 double
- 你的局部变量没初始化就输出了,比如你定义了一个 int a,但是也没改过它就输出了。
- 你数组越界了,比如你定义了一个数组 int a[100],但你打了 a[100] 或者 a[-1]。
如果上面几种情况都查过了,或者你的答案看起来比较正常,那么可能是程序逻辑有问题。你可以在程序中间加一些 printf,把你修改过的变量打出来,看看和你想的是否一样。
如果你通过了样例,但还是出错了,这个时候你就要仔细读题了。要排查:
- 你的输入输出格式和题目是不是不一样?是不是写了不必要的提示语?是不是题目要求用回车你用了空格?
- 你的精度是否正确?是不是有可以用 double 的地方没用 double?
- 你仔细阅读输入数据的大小了吗?
- 想想题意,有没有你没判断到的部分?
除了题目给的测试数据之外,你也可以自己在题目给的数据大小内制造一些你能看出正确性数据,比如:
- 特殊值:能够为 0 的数据,试试输入 0。1 同理。
- 负数。
- 特别大的输入。
- 特别刁钻的输入,比如题目要求输入两个数,一个你设为数据范围上限,一个设为数据范围下限。
- 随机数据。
你甚至可以写一个验证程序来验算,证程序有时候会比真实程序简单。比如说一个程序要给你 100000 个数,问你 37 在里面的第几个。你提交的程序可能要写个循环,但是你的验证程序只用判断 if(a[ans] == 37) 就行了。(如果 ans 是原程序的结果的话)
当然,具体的经验还是要通过多做题、熟练掌握语言、算法和查错的技巧。