在前面給大家提供的C語言網(wǎng)Online Judge系統(tǒng)支持語言和編譯說明
中,對于判題結(jié)果僅僅是大致的解釋,仍不少同學(xué)感到迷惑,那今天我們就對這些結(jié)果一一詳細(xì)解釋并舉例說明,讓大家徹底覺悟!
等待 | |
等待 | 服務(wù)器正忙,請稍后查看 |
運行并評判 | 您的程序正在評測中 |
編譯中 | 您的程序正在被編譯 |
正確 | 恭喜您!完全正確! |
格式錯誤 | 結(jié)果正確,但格式不正確,比如多或少了換行或空格 |
答案錯誤 | 經(jīng)過比對,您的程序錯誤 |
運行錯誤 | ?? 程序運行后發(fā)生錯誤,可能包括:
1.? 指針/數(shù)組違規(guī)訪問 2.? 除數(shù)為0 3.? 函數(shù)調(diào)用錯誤,或棧溢出 4.? 捕捉到違背處理的STL或自定義異常等
|
時間超限 | 程序運行時間超過了時間限制,請檢查程序的算法效率 |
內(nèi)存超限 | 程序使用的內(nèi)存超過了內(nèi)存限制,請檢查程序是否棧/堆開辟空間過大 或內(nèi)存泄露 |
輸出超限 | 輸出了與答案無關(guān)的信息,比如“please ?input”等提示 |
編譯錯誤 | ????????????????? 程序語法錯誤,編譯不通過。可能您在本地可以編譯通過,但可能使用了非標(biāo)準(zhǔn)C的函數(shù) ,請使用符合標(biāo)準(zhǔn)的語法。 |
對于,前三種,等待、運行并評判、編譯中這第三種基本沒什么問題,由題目的測試數(shù)據(jù)大小、服務(wù)器的資源情況決定的,基本怎么也在半分鐘以內(nèi)完成的(一直如此,可能服務(wù)器出問題,請聯(lián)系管理員了)。第四種正確那想必是大家都想看到的!是我們通過一道題的終極目標(biāo)!
重點呢,大家要明白OJ的原理,它的判題原則呢就是看你的程序輸出和答案的輸出進(jìn)行比對,看看是否一模一樣!請時刻牢記,要一模一樣!一模一樣!一模一樣?。ㄖ匾虑檎f三遍!)
下面我們給大家詳細(xì)介紹幾種常見的,告訴大家到底什么原因。
第一個是“格式錯誤”
格式錯誤,簡單的解釋就是結(jié)果正確,但由于格式不對,多或者少了換行、空格等等。這種情況大多發(fā)生在輸出結(jié)果時,結(jié)果本身是正確的,但由于格式控制與標(biāo)準(zhǔn)答案不一致導(dǎo)致。如果題目有多組數(shù)據(jù),比如咱們訓(xùn)練場的ACM入門訓(xùn)練1085題,求A+B的和,有多組測試數(shù)據(jù),人家輸入1空格5那你要輸出6,人家輸入10空格20你要輸出30,如果就這么兩組測試數(shù)據(jù)的話,那么你的答案應(yīng)該是:
6
20
看到這個樣子你應(yīng)該想想你的格式控制了吧,那么這里輸出是要有換行的,如果這里沒有打換行,而是打了一個空格。那么你的輸出結(jié)果將是:
6_20_
你和標(biāo)準(zhǔn)答案對對看,人家是豎著的,你是橫著的,能對么?(記住,要一模一樣?。?/span>
機(jī)智的是OJ知道你數(shù)對了,但格式不對,所以結(jié)果就是格式錯誤!
另一種情況,如果這里只輸出,空格和回車都沒有,那么你的結(jié)果將是:
620
啥?620?! 當(dāng)然不是六百二,可你的程序輸入結(jié)果明明如此嘛!
所以這種情況,直接報答案錯誤!
怎么樣,關(guān)于這個格式錯誤,大家明白了嗎?
第二個,“答案錯誤”
這種情況, 可能為做題人沒有明白題目的意思,訓(xùn)練場題庫中的題目基本都給出了樣例輸入和樣例輸出,是讓你寫完程序后測試、驗證用的,不代表后臺的測試數(shù)據(jù)就這些(PS:后臺刁難你的數(shù)據(jù)多的很呢,hiahiahia~)。這里我們遇到的大多數(shù)情況,是你的程序可能已經(jīng)測試過能通過樣例的數(shù)據(jù),但這不代表可以通過后臺的測試數(shù)據(jù)。
以訓(xùn)練場1392題為例,計算A+B的和,但,請仔細(xì)看題,題目中有描述稱“多行測試數(shù)據(jù),每行包含兩個正整數(shù)a和b,a和b的范圍不會超過1000位”,看到了嗎?a和b不會超過1000位??!驗題君偷偷告訴你,它說不超過1000位,八成后臺就有999位的數(shù)據(jù)在等你!你難道還敢寫printf(“%d\n”,a+b);的代碼嗎?別說int了,就是long long也放不下哦! 想都不用想,肯定報答案錯誤!
這題是典型的大數(shù)相加算法。所以,一定要保證程序考慮的通用和全面性,包括是否有特殊情況沒有考慮到。
第三個,“運行錯誤”
運行錯誤,基本上是你的程序運行過程中出錯崩潰、停止了??赡苡型瑢W(xué)又會問,我自己機(jī)器上測試沒問題啊!還是那句話,后臺數(shù)據(jù)多的很,不定哪組數(shù)據(jù)就會讓你的程序出問題,出現(xiàn)屬于組越界訪問、指針異常的問題,或某種情況下,除數(shù)出現(xiàn)為0的情況,甚至C++的STL庫運用不當(dāng)?shù)鹊龋@個時候,驗題君建議同學(xué)們自己給自己多舉幾個常規(guī)和特殊的例子,然后斷點調(diào)試全過程,逐句觀察吧。驗題君也只能幫到這了。
第四個,“時間超限”
這種情況,八成是因為你的程序算法效率過低,不能在固定的時間要求內(nèi)完成(一般是1s)。咱們C語言網(wǎng)的題普遍以入門和日常訓(xùn)練為主,此類算法題相對很少。這個問題也引申一些競賽技巧,難以一一講清,只能建議大家多訓(xùn)練、參加比賽來提升!
第五個,“內(nèi)存超限”
這個問題基本少之又少了,相比之下java類代碼內(nèi)存較大,但很少有此類現(xiàn)象發(fā)生,也不排除C/C++代碼有內(nèi)存泄漏,譬如忘記free/delete內(nèi)存等等。
第六種,“輸出超限”
這類問題新人較常見,可能受于教學(xué)環(huán)境影響,習(xí)慣性在scanf和printf之前打?。骸罢堓斎搿薄ⅰ癮,b的結(jié)果是:”、“please input”類似的語句,這種寫法將直接存入輸出結(jié)果中,作為結(jié)果比對,報輸出超限甚至答案錯誤的結(jié)果。因為OJ是逐字符比對!還是那四個字:一模一樣!
第七種,“編譯錯誤”
首先,避免這個問題,建議大家使用Dev-c++、CodeBlocks、gcc編譯器。以VC6為例,可能不寫#include<stdio.h>用printf也可以,但OJ提交就會報錯,還有64位長整形表示不同等等。建議訓(xùn)練場刷題同學(xué)使用剛才建議的三種編譯器之一(下載鏈接見附)。
總結(jié)錯誤原因,請確認(rèn)提交代碼在gcc編譯器環(huán)境下編譯無誤再進(jìn)行提交,如果有把握使用VC6,則請確認(rèn)代碼在兩種環(huán)境下沒有編譯兼容問題。
附:C/C++開發(fā)和學(xué)習(xí)人員必備工具下載集合(含助手及破解補(bǔ)丁)
以上七種,希望可以解決同學(xué)們的一些疑惑!
C語言網(wǎng)訓(xùn)練場,提供支持C/C++/JAVA語言的在線評測訓(xùn)練系統(tǒng),歡迎大家提交反饋!私信驗題君哦!