校内ACM上出现Presentation Error的一点经验
的有关信息介绍如下:首先声明,本人是菜鸟,最近开始学习C语言。现在很多学校校内都有Online Judge平台(类似ACM平台),通常在电脑上写的程序运行成功后,在Online Judge平台上同样能Accepted。但是有时候,明明电脑上运行的结果正确,但在OJ平台上却会出错,当然,最常见也最纠结的,估计也就是Presentation Error。在百度上搜索过,也没有系统讨论这种错误的文章。昨晚一个问题提交了8次都是Presentation Error,和老师讨论了一下修改了代码,得到了关于这个错误的一点新的认识。想到这个问题很多和我一样的菜鸟可能也会碰到,把经验分享给大家。
首先可以肯定的是,你的思路没有错,输出结果也与标准输出结果非!常!接!近!出现这个错误最可能的原因是,在输出结果的后面,多了或少了没什么意义的空格,tab,换行符等等。所以,请先认真检查程序的输出结果是否与标准完!全!一!致!OJ平台对格式的检查可以说是非!常!严!格!
如果认真检查过,真的没有问题的话,唯一的可能,就是标准输出结果存在问题!标准的输出结果后面有些你看不见的空格或者换行符!加个空格或换行符再试一试!
如果还是不行,也许有些特殊的问题被忽视了,以下是本人两次PE的经历。
第一次:C语言与C++的差别?我们中大的Sicily的第一题http://www.soj.me/1000输入两个数输出它们的差。看上去很简单,但我写了好几次,都是Presentation Error!以上是当时的代码:在网上找Accepted的代码,发现C++的却能顺利通过。以下是C++的代码:为什么C语言PE而C++Accepted?这个问题困扰了我很久。其实答案很简单,只要把两个代码的输出语句再写一行,就会发现,C语言输出的两个数值是连在一起的,而C++则会自动空一行!所以,问题就是答案的标准输出结果里有一个隐藏的空行!所以只要在C语言代码的输出语句里加一个,原来PE的代码就变成Accepted了!请注意C++输出语句中的隐藏的换行符!
第二次:数组排序问题http://www.soj.me/show_problem.php?pid=8740
输入10个整数 输出由小到大排序的10个整数。这个问题我提交了8次,C语言的全部Wrong Answer,C++的全部PE!以下是WA PE和Accepted的代码,大家自己找找区别吧。1.C语言的WA2.C++的PE3.Accepted的代码(请忽略char c=32这行代码……)相信大家已经看出问题了,Accepted的最后一个数字后面还有一个空格!而且结果后面没有空行,所以C++不会Accepted!至于C语言为什么Wrong Answer,我的猜测是C语言的scanf和printf里的变量不能太多(数组除外),否则运行就会出错。所以如果输出数组以空格为分隔符的时候,请留心最后是否有一个空格!
就写到这里了,以后如果有新的情况再更新。