编译错误(Complie Error)
这说明你的代码本身就没有通过OJ的语法检查,请根据OJ返回的错误详情修改你的代码。
注意,由于OJ采用和VC6.0不同的编译器,以下几点要求必须谨记:
- iostream头文件不含.h(#include<iostream>)
- 主函数类型必须为整型(int main())
- 不可使用随机数random()函数,以及fflush()函数
答案错误(Wrong Answer)
此类错误常见于输出的数据错误了,你所写的程序必须要经得起任何数据的测试才能算通过,而不是仅仅通过了样例测试
运行时错误(Runtime Error)
此类错误在运行时产生,往往是由于在程序的运行过程中出现了不可计算或不可操作的语句。比如0作为除数的语句,以及对野指针进行解引用赋值等等。出现这类错误你需要对可能出现错误的地方进行定位,然后排查错误。
例如,以下的代码会出现运行时错误
#include <iostream>
using namespace std;
int main(){
int a=1,b=0;
printf("%d", a/b); //0作为除数
return 0;
}
格式错误(Presentation Error)
此类错误常见于输出了错误数量的空格或者换行。建议在做题之前先看好题目要求,以及观察样例输出的格式,确保空格数量以及换行符(\n)数量的匹配,就可以避免此类问题出现。
例如,要求输出的格式为
Very Good!
// Very前面有8个空格 Good前面有4个
那么对应的输出语句应该为
cout<<" Very Good!"<<endl;
同理Very前面一样有8个空格,Good前面有4个空格
只有双引号内的字符串才会被输出,所以不要把空格打在双引号的外面。
时间超限(Time Limit Exceeded)
出现此类错误一般是程序没有正确的返回语句(return 0;)或者陷入了死循环(while,for,do...while)导致的。一般出现此类错误可以通过单步调试进行排查。
例如以下程序就会陷入死循环
#include <iostream>
using namespace std;
int main(){
int a=0;
while(a<100){
printf("%d", a); //由于a的值永远为0,导致无法正常结束,OJ判定为超时
}
return 0;
}
内存超限(Memory Limit Exceeded)
虽然这类错误不常见,但是还是提一提,每道题目都会有内存限制(通常为1MB),代表了你这个程序所能使用的最大内存数量,那么你开数组的时候,就需要控制在百万级别以内。