• 欢迎访问C语言网www.dotcpp.com 比赛栏每月有奖月赛!举办比赛联系QQ:2045302297
  • 问题反馈、粉丝交流 QQ群327452739 蓝桥杯训练群:113766799 申请群时请备注排名里的昵称
  • C语言研究中心 为您提供有图、有料、解渴的C语言专题! 欢迎讨论!

训练场题库中判题结果的详细解释

编程经验 CTO 3503次浏览 0个评论

在前面给大家提供的C语言网Online Judge系统支持语言和编译说明

中,对于判题结果仅仅是大致的解释,仍不少同学感到迷惑,那今天我们就对这些结果一一详细解释并举例说明,让大家彻底觉悟!

 

等待
等待 服务器正忙,请稍后查看
运行并评判 您的程序正在评测中
编译中 您的程序正在被编译
正确 恭喜您!完全正确!
格式错误 结果正确,但格式不正确,比如多或少了换行或空格
答案错误 经过比对,您的程序错误
运行错误    程序运行后发生错误,可能包括:

1.  指针/数组违规访问

2.  除数为0

3.  函数调用错误,或栈溢出

4.  捕捉到违背处理的STL或自定义异常等

 

时间超限 程序运行时间超过了时间限制,请检查程序的算法效率
内存超限 程序使用的内存超过了内存限制,请检查程序是否栈/堆开辟空间过大 或内存泄露
输出超限 输出了与答案无关的信息,比如“please  input”等提示
编译错误                   程序语法错误,编译不通过。可能您在本地可以编译通过,但可能使用了非标准C的函数 ,请使用符合标准的语法。

 

 

对于,前三种,等待、运行并评判、编译中这第三种基本没什么问题,由题目的测试数据大小、服务器的资源情况决定的,基本怎么也在半分钟以内完成的(一直如此,可能服务器出问题,请联系管理员了)。第四种正确那想必是大家都想看到的!是我们通过一道题的终极目标!

重点呢,大家要明白OJ的原理,它的判题原则呢就是看你的程序输出和答案的输出进行比对,看看是否一模一样!请时刻牢记,要一模一样!一模一样!一模一样!(重要事情说三遍!)

 

下面我们给大家详细介绍几种常见的,告诉大家到底什么原因。

 

第一个是“格式错误”

格式错误,简单的解释就是结果正确,但由于格式不对,多或者少了换行、空格等等。这种情况大多发生在输出结果时,结果本身是正确的,但由于格式控制与标准答案不一致导致。如果题目有多组数据,比如咱们训练场的ACM入门训练1085题,求A+B的和,有多组测试数据,人家输入1空格5那你要输出6,人家输入10空格20你要输出30,如果就这么两组测试数据的话,那么你的答案应该是:

6

20

看到这个样子你应该想想你的格式控制了吧,那么这里输出是要有换行的,如果这里没有打换行,而是打了一个空格。那么你的输出结果将是:

6_20_

你和标准答案对对看,人家是竖着的,你是横着的,能对么?(记住,要一模一样!)

机智的是OJ知道你数对了,但格式不对,所以结果就是格式错误!

另一种情况,如果这里只输出,空格和回车都没有,那么你的结果将是:

620

啥?620?! 当然不是六百二,可你的程序输入结果明明如此嘛!

所以这种情况,直接报答案错误!

怎么样,关于这个格式错误,大家明白了吗?

 

第二个,“答案错误”

这种情况, 可能为做题人没有明白题目的意思,训练场题库中的题目基本都给出了样例输入和样例输出,是让你写完程序后测试、验证用的,不代表后台的测试数据就这些(PS:后台刁难你的数据多的很呢,hiahiahia~)。这里我们遇到的大多数情况,是你的程序可能已经测试过能通过样例的数据,但这不代表可以通过后台的测试数据。

训练场1392题为例,计算A+B的和,但,请仔细看题,题目中有描述称“多行测试数据,每行包含两个正整数a和b,a和b的范围不会超过1000位”,看到了吗?a和b不会超过1000位啊!验题君偷偷告诉你,它说不超过1000位,八成后台就有999位的数据在等你!你难道还敢写printf(“%d\n”,a+b);的代码吗?别说int了,就是long long也放不下哦! 想都不用想,肯定报答案错误!

这题是典型的大数相加算法。所以,一定要保证程序考虑的通用和全面性,包括是否有特殊情况没有考虑到。

 

第三个,“运行错误”

运行错误,基本上是你的程序运行过程中出错崩溃、停止了。可能有同学又会问,我自己机器上测试没问题啊!还是那句话,后台数据多的很,不定哪组数据就会让你的程序出问题,出现属于组越界访问、指针异常的问题,或某种情况下,除数出现为0的情况,甚至C++的STL库运用不当等等,这个时候,验题君建议同学们自己给自己多举几个常规和特殊的例子,然后断点调试全过程,逐句观察吧。验题君也只能帮到这了。

附:VC6编译器断点调试全系列教程(全)

 

第四个,“时间超限”

这种情况,八成是因为你的程序算法效率过低,不能在固定的时间要求内完成(一般是1s)。咱们C语言网的题普遍以入门和日常训练为主,此类算法题相对很少。这个问题也引申一些竞赛技巧,难以一一讲清,只能建议大家多训练、参加比赛来提升!

 

第五个,“内存超限”

这个问题基本少之又少了,相比之下java类代码内存较大,但很少有此类现象发生,也不排除C/C++代码有内存泄漏,譬如忘记free/delete内存等等。

 

第六种,“输出超限”

 

这类问题新人较常见,可能受于教学环境影响,习惯性在scanf和printf之前打印:“请输入”、“a,b的结果是:”、“please input”类似的语句,这种写法将直接存入输出结果中,作为结果比对,报输出超限甚至答案错误的结果。因为OJ是逐字符比对!还是那四个字:一模一样!

 

第七种,“编译错误”

 

首先,避免这个问题,建议大家使用Dev-c++、CodeBlocks、gcc编译器。以VC6为例,可能不写#include<stdio.h>用printf也可以,但OJ提交就会报错,还有64位长整形表示不同等等。建议训练场刷题同学使用刚才建议的三种编译器之一(下载链接见附)。

总结错误原因,请确认提交代码在gcc编译器环境下编译无误再进行提交,如果有把握使用VC6,则请确认代码在两种环境下没有编译兼容问题。

附:C/C++开发和学习人员必备工具下载集合(含助手及破解补丁)

 

以上七种,希望可以解决同学们的一些疑惑!

C语言网训练场,提供支持C/C++/JAVA语言的在线评测训练系统,欢迎大家提交反馈!私信验题君哦!


C语言网, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明训练场题库中判题结果的详细解释
喜欢 (26)
[jinyangH@aliyun.com]
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)