Dotcpp  >  编程教程  >  了解竞赛  >  什么是OJ,是做什么的?

什么是OJ,是做什么的?

点击打开在线编译器,边学边练

什么是OJ,是做什么的?

常见的ACM、蓝桥杯、甚至NOIP等主流比赛中,无论实时出结果还是赛后统一评测,几乎都是以OJ作为评测系统的,即非人工主导,机器自主评测。这就是OJ -  全称为OnlineJudge,即在线评测系统


由于程序设计类比赛,不仅仅要验证程序的正确与否,还要进行语法编译检测、内存、时间的检测等等,人工也很难做到,因此也只能使用OJ评测,

OJ的工作原理

OJ采用后台黑箱测试的原理,即测试比对结果的方式,而测试数据非常全面,涵盖各种特殊情况。并且在结果的比对上也不放过一个空格和回车,这就要求程序员要有非常严谨的思维。因此程序中一旦有多余的输出信息,都将认为答案错误。

常见的问题例如,新手学习编程常常会写:

printf("Please input:");

等等类似的语句,殊不知程序在交由OJ评测后,这一行输出的内容"Please input:"也会作为程序的答案一部分进行比对,结果可想而知。即便答案是对的,也逃脱不了0分未通过的结果。


正常一道题目的题面信息,我们会看到题目描述、输入格式、输出格式、样例输入、样例输出等几部分。

其中的样例输入和输出就是用来让你验证理解题意的例子,并非只处理这组数据(那题也太简单了),真正提交程序后的评测,可能会有十组甚至二十组、五十组的数据等着程序比对,例如a+b的问题,测试数据很可能不仅仅测1+1=2的结果,还会测测99+1=100这种有进位的数据,还会测20 0000 0000+10 0000 0000 = 30 0000 0000 这样的超int范围数据等等,大量常规数据、特殊值、边界值等着你,一旦有一组数据没有通过。ACM这样的比赛就会错误,蓝桥杯这样的比赛只能拿部分分数了


市面上常见的OJ有很多,比如北大的POJ,杭电的HOJ,以及国外的UVA等等,虽然ACM、蓝桥杯、NOIP不同的比赛的题目基本是相通的,都可以刷题使用,但ACM类的OJ通常是英文居多,其余比赛中文居多。难度定位也略有不同。

例如Dotcpp,是面向编程初学者,兼顾算法数据结构的轻量级中文OJ


本文固定URL:https://www.dotcpp.com/course/788

Dotcpp在线编译      (登录可减少运行等待时间)