有时候做题时,在编译器上能编译正常,可是到oj这边总是各种判错,非常苦恼。于是我总结了一些oj报错的经常出现的问题,供大家参考。
目录
RE(running error ):
- 某个函数没有返回对应函数类型的值。比如,main主函数中有无return 0、函数int max()有无返回 int 值,C++的重载运算符函数
MyStack& operator = (
const
MyStack& b)
有无返回*this或者该MyStack类的对象。 - 数组会不会开太小,人家要求有几个W数据的要求,而你开的数组大学却只是小小的几十,几百。在题目允许的内存空间的前提下,尽量开大数组。
- 除以0的错误。这是一个动态语义错误,即运行时发生的错误,编译器发现不了。要检查一下除号 / 和 求余 % 的右边是否会出现0的状况。
- 数组起始位置最好为0,最好不用用到a[Max]这个值。为以防万一,尽量开数组大小都加上1或5等等,即a[Max+1] 。这样就不会用到这些临界值。
- 有时候死循环也会导致RE,检查判断一下循环条件或选择判断条件。
- 指针一定要动态内存分配,不分配的话,指针变成野指针,没有指向哪个地址,会报错的。在C++中采用new来申请内存,delete来释放申请的内存。
WA(wrong answer):
- 看看人家的输入数据。是不是把boy的数据安到girl上了,n的值赋给m了……特别是样例中这一对数据还是相等的时候……我都不知道有几次干这样的傻事了。
- 还是输入数据。如果一个测试点里有多组数据,有没有可能比方说sum = 0的时候结果一定为0,而无论后面的数据是什么?这样的话你可能会一个continue转到下一组数据。可是数据流才不会continue,后面没读完的数据理所当然的冲到了最前方,你的程序就这样WA了……
- 初始化。你的初始化正确么?边界条件是0,1,还是k,n?
- 循环变量。for的循环变量如果是k,就看看后边用的是不是i。
- 你的智商够不够高,是否考虑到所有的问题了?你可以想办法搞一份AC了的代码,里面写什么连看都不看,之后编写一个“测试数据制造机”,数大,数据多,情况就复杂,就可能出现你没想到的状况,拿两个程序对一下答案就知道了。
未完待续……
可能有更多的Bug等着被发现,加油吧各位大佬!!
参考文章:oj判题WA/RE怎么办 - boobird - 博客园
欢迎关注我的微信公众号,分享一些有趣的知识:程序猿的茶水间