写题时常见的问题

编译错误(Complie Error)

这说明你的代码本身就没有通过OJ的语法检查,请根据OJ返回的错误详情修改你的代码。

注意,由于OJ采用和VC6.0不同的编译器,以下几点要求必须谨记:

  1. iostream头文件不含.h(#include)
  2. 主函数类型必须为整型(int main())
  3. 不可使用随机数random()函数,以及fflush()函数

答案错误(Wrong Answer)

此类错误常见于输出的数据错误了,你所写的程序必须要经得起任何数据的测试才能算通过,而不是仅仅通过了样例测试

运行时错误(Runtime Error)

此类错误在运行时产生,往往是由于在程序的运行过程中出现了不可计算或不可操作的语句。比如0作为除数的语句,以及对野指针进行解引用赋值等等。出现这类错误你需要对可能出现错误的地方进行定位,然后排查错误。
例如,以下的代码会出现运行时错误

#include 
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!"<

同理Very前面一样有8个空格,Good前面有4个空格

只有双引号内的字符串才会被输出,所以不要把空格打在双引号的外面。

时间超限(Time Limit Exceeded)

出现此类错误一般是程序没有正确的返回语句(return 0;)或者陷入了死循环(while,for,do...while)导致的。一般出现此类错误可以通过单步调试进行排查。
例如以下程序就会陷入死循环

#include 
using namespace std;

int main(){
    int a=0;
    while(a<100){
        printf("%d", a); //由于a的值永远为0,导致无法正常结束,OJ判定为超时
    }
    return 0;
}

内存超限(Memory Limit Exceeded)

虽然这类错误不常见,但是还是提一提,每道题目都会有内存限制(通常为1MB),代表了你这个程序所能使用的最大内存数量,那么你开数组的时候,就需要控制在百万级别以内。

你可能感兴趣的:(写题时常见的问题)