ACM找bug方案

测试数据和一些常见的数据都通过了然而还是wrong,可以试试下面的一些解决方案:

    1.数据爆掉

                      ①  可以改变数据类型,以容纳
                      ②  修改当前算法,比如a*a/b可以改写成a/b*a

   2 特殊情况,例如地图只有一行而算法默认的地图是多行的,如两个数刚好相等时,两个数都为0时等等

                     ①  输入极端值测试,根据情况修改程序
                     ②计算过程中算法太复杂,一般情况下代码越少越不容易出现错误,所以中间步骤越少越好,宁愿牺牲时间

  3 精度问题

                   ①使用强制转换,将int转换成double或将double转换成int都有可能会失去精度造成结果的差异
                   ②使用一些函数操作浮点型数据,得到的结果并不是精确的值,比如pow()返回的值是大概值
                   ③尽量不要用两个浮点去比较大小,尤其不能比较两个浮点数是否相等,因为两个浮点数可能不是精确的值

                                 memset(pei,-1,sizeof(pei)) ,pei[key]==-1,会发现这个判断是否,将-1改成0就可以解决

4 题目看错了,尽管数据过去了,但是还是wrong,这时可以检查是不是看错了题目,这点很重要

 5 其他情况

                  ① 在有了ac程序的情况下,可以使用对拍来找出错误  
                   先用 rand()生成随机数,读入文件中      freopen("F:\in.txt", "r", stdout)
                    再用ac程序跑一遍in.txt,得到out.txt文件  freopen("F:\in.txt", "r", stdin);     freopen("F:\out.txt", "w", stdout);
                   再用自己的程序跑一遍int.txt,得到out.txt文件  freopen("F:\in.txt", "r", stdin);     freopen("F:\out2.txt", "w", stdout);
                  对比out.txt,out2.txt找出错误的数据
 
原文地址:https://www.cnblogs.com/carcar/p/8276142.html