[问题] 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