[問題] UVa1225 Digit Counting

看板C_and_CPP (C/C++)作者時間11年前 (2015/01/08 22:39), 編輯推噓4(4029)
留言33則, 4人參與, 最新討論串1/2 (看更多)
開發平台(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是為什麼? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.205.139.59 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1420727980.A.B2C.html

01/08 22:50, , 1F
你有把buf印出來看過嗎?
01/08 22:50, 1F

01/09 08:05, , 2F
下班後來試試,因為想說times對就好,buf只是拿來暫存
01/09 08:05, 2F

01/09 19:55, , 3F
把buf印出來後是正確的數字....不太懂我的程式碼錯在哪
01/09 19:55, 3F

01/10 00:26, , 4F
在 for 中要先將 buf 清空,多加一段
01/10 00:26, 4F

01/10 00:26, , 5F
memset(buf,0,sizeof(buf)); 應該就會 AC 了
01/10 00:26, 5F

01/10 00:28, , 6F
其實我也跟 sprintf 不熟,不過照這樣看來應該是
01/10 00:28, 6F

01/10 00:28, , 7F
sprintf 在將字串存入buf時並沒有將原有的內容清空
01/10 00:28, 7F

01/10 00:29, , 8F
才會導致此錯誤,詳細可能還需要其他前輩來解釋了
01/10 00:29, 8F

01/10 08:19, , 9F
我原先也懷疑會不會是buf問題,但是每次數字用字串存入
01/10 08:19, 9F

01/10 08:20, , 10F
buf,都會蓋掉上次存的,因為字串是隨著數字增加而增加,
01/10 08:20, 10F

01/10 08:21, , 11F
長度比定等於或大於上一次存的,我只是很懷疑我試很多
01/10 08:21, 11F

01/10 08:22, , 12F
測資,兩種解法的output且格式都一樣,怕是我忽略了
01/10 08:22, 12F

01/10 08:23, , 13F
了critical的測資,UVa不是只看output嗎?
01/10 08:23, 13F

01/10 08:26, , 14F
多加了tuyutd前輩說的那段真的就AC了....,不太懂為什麼
01/10 08:26, 14F

01/10 08:28, , 15F
畢竟我沒有這一段時,for迴圈裡每次印出buf都是正確字串
01/10 08:28, 15F

01/10 08:28, , 16F
OUTPUT也沒有改變阿......
01/10 08:28, 16F

01/10 10:14, , 17F
你印了"1"進 buf, 它只會寫入 buf[0]=='1' 和 buf[1]=='\0'
01/10 10:14, 17F

01/10 10:14, , 18F
buf[2]~buf[4] 是什麼值不知道, 接著你在後面的 k 迴圈裡
01/10 10:14, 18F

01/10 10:15, , 19F
又去存取它了, 所以就不知道在比什麼東西
01/10 10:15, 19F

01/10 10:15, , 20F
這跟你印出 buf 字串的內容對不對無關, 因為那是在字串之後
01/10 10:15, 20F

01/10 10:15, , 21F
的東西
01/10 10:15, 21F

01/10 10:16, , 22F
memset 就是保證把你的陣列給清成 '\0'
01/10 10:16, 22F

01/10 11:45, , 23F
我是想說雖然存取到奇怪的值,但我去比對0-9的字串
01/10 11:45, 23F

01/10 11:46, , 24F
只有相等時times陣列才會更動所以我確保我最後的output
01/10 11:46, 24F

01/10 11:47, , 25F
是正確的,我以為UVa的OJ只會去管我的輸出?
01/10 11:47, 25F

01/10 11:48, , 26F
我才會想說為了達到正確的output這樣做是無所謂的
01/10 11:48, 26F

01/10 11:50, , 27F
還是說剛好幾次沒定義的buf的內容剛好是'0'~'9'中字元
01/10 11:50, 27F

01/10 11:50, , 28F
導致答案錯誤?
01/10 11:50, 28F

01/10 12:04, , 29F
我覺得最有可能的是我沒法確認存取到沒定義的buf元素
01/10 12:04, 29F

01/10 12:05, , 30F
是否會造成錯的答案,也許在我的系統不會出問題,
01/10 12:05, 30F

01/10 12:06, , 31F
但在其他的系統上執行可能會因為存取到
01/10 12:06, 31F

01/10 12:06, , 32F
為定義的buf元素值而造成times陣列錯誤
01/10 12:06, 32F

01/10 20:14, , 33F
你的理解都是對的
01/10 20:14, 33F
文章代碼(AID): #1KhfQiii (C_and_CPP)
文章代碼(AID): #1KhfQiii (C_and_CPP)