[問題] UVa1225 Digit Counting

作者: tony21177   2015-01-08 22:39:36
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NA
問題(Question):Uva1225
餵入的資料(Input):data
預期的正確結果(Expected Output):AC
錯誤結果(Wrong Output):一個AC一個WA
程式碼(Code):AC程式碼http://codepad.org/mWGQD4Hn
WA程式碼http://codepad.org/xxsVfUlW
補充說明(Supplement):這題我嘗試了兩個寫法,其中一個寫法提交AC了,另一個
卻是WA,但是我嘗試了各種測資,兩種答案都對且格式正確,不太懂WA是為什麼?
作者: ZanFu5566 (仁甫56 優質56 清新56)   2015-01-08 22:50:00
你有把buf印出來看過嗎?
作者: tony21177   2015-01-09 08:05:00
下班後來試試,因為想說times對就好,buf只是拿來暫存
作者: tuyutd0505 (Huang Jason)   2015-01-10 00:26:00
在 for 中要先將 buf 清空,多加一段memset(buf,0,sizeof(buf)); 應該就會 AC 了其實我也跟 sprintf 不熟,不過照這樣看來應該是sprintf 在將字串存入buf時並沒有將原有的內容清空才會導致此錯誤,詳細可能還需要其他前輩來解釋了
作者: tony21177   2015-01-10 08:19:00
我原先也懷疑會不會是buf問題,但是每次數字用字串存入buf,都會蓋掉上次存的,因為字串是隨著數字增加而增加,長度比定等於或大於上一次存的,我只是很懷疑我試很多測資,兩種解法的output且格式都一樣,怕是我忽略了了critical的測資,UVa不是只看output嗎?多加了tuyutd前輩說的那段真的就AC了....,不太懂為什麼畢竟我沒有這一段時,for迴圈裡每次印出buf都是正確字串OUTPUT也沒有改變阿......
作者: LPH66 (-6.2598534e+18f)   2015-01-10 10:14:00
你印了"1"進 buf, 它只會寫入 buf[0]=='1' 和 buf[1]=='\0'buf[2]~buf[4] 是什麼值不知道, 接著你在後面的 k 迴圈裡又去存取它了, 所以就不知道在比什麼東西這跟你印出 buf 字串的內容對不對無關, 因為那是在字串之後的東西memset 就是保證把你的陣列給清成 '\0'
作者: tony21177   2015-01-10 11:45:00
我是想說雖然存取到奇怪的值,但我去比對0-9的字串只有相等時times陣列才會更動所以我確保我最後的output是正確的,我以為UVa的OJ只會去管我的輸出?我才會想說為了達到正確的output這樣做是無所謂的還是說剛好幾次沒定義的buf的內容剛好是'0'~'9'中字元導致答案錯誤?我覺得最有可能的是我沒法確認存取到沒定義的buf元素是否會造成錯的答案,也許在我的系統不會出問題,但在其他的系統上執行可能會因為存取到為定義的buf元素值而造成times陣列錯誤
作者: LPH66 (-6.2598534e+18f)   2015-01-10 20:14:00
你的理解都是對的

Links booklink

Contact Us: admin [ a t ] ucptt.com