[問題] 加了printf結果變數就不一樣了?

作者: ketchupgood (番茄醬)   2017-10-04 04:42:53
https://i.imgur.com/1p7si7t.jpg
https://i.imgur.com/86KmZwv.jpg
https://i.imgur.com/0PN7VEy.jpg
如題 完全不懂為什麼 跪求解釋OTZ
作者: CoNsTaR ((const *))   2017-10-04 05:04:00
打高空的說法,因為 c/c++ 有 side effect,結案
作者: Schottky (順風相送)   2017-10-04 05:28:00
與其說不同意樓上,不如說我不知道樓上在講什麼?你的兩個 scanf 寫錯了,把 warning 全開就會有警告了這些地方要小心點,出槌時會出現一個摸不著頭腦的 bug然後你的演算法是錯的,試試 aabbb 和 cccdd
作者: yvb   2017-10-04 08:37:00
發[問題]不是有格式?且程式用貼圖有點糟,建議用置底那篇方式.然後scanf處有warning但不影響; 後半比較像是算總字數而已.問題在於, printf 出來的 13 13 是否如同預期.也就是說, 犯了置底十三誡中,第一誡的延伸, 陣列後段無初值.
作者: kingofsdtw (不能閒下來!!)   2017-10-04 09:39:00
https://goo.gl/gcTqGq路過.文字處理是一門學問,我個人是不建議花太多時間因為沒人會用C std來等待輸入,argc/argv學好就好
作者: x000032001 (版廢了該走了)   2017-10-04 09:48:00
好奇不會用std IO 要怎麼處理檔案IO
作者: CoNsTaR ((const *))   2017-10-04 10:32:00
樓樓上表示檔案 IO?我都只用網路 socket 和 sql
作者: Schottky (順風相送)   2017-10-04 11:19:00
我昨晚是喝多少... Orzyvb 說的沒錯,問題出在陣列無初值你以為陣列後段全部是 0 其實並不。不信可以在 scanf 前加上 memset(first,0,100); 和memset(second,0,100); 別忘了 #include <string.h>
作者: ketchupgood (番茄醬)   2017-10-04 11:49:00
呃 aabbb跟cccdd顯示是對的啊我看看樓上大大說的 我是完全新手所以有些術語聽不太懂喔喔 可以了 原來要先設成0然後發文格式不對不好意思 沒什麼用過這版
作者: james732 (好人超)   2017-10-04 12:06:00
置底文有貼程式專用的網站,不要用截圖的
作者: ketchupgood (番茄醬)   2017-10-04 12:15:00
然後再問一個例子 如果abc!e跟acbe? 也要做成一樣的話 我這個那邊有問題哪邊*https://godbolt.org/g/pLK63D
作者: MOONRAKER (㊣牛鶴鰻毛人)   2017-10-04 12:52:00
噗 不是哪邊有問題 是哪邊沒問題用到三層for 你腫大了 比西瓜還大你最好重發一篇 照規定格式貼好
作者: Schottky (順風相送)   2017-10-04 13:00:00
樓上的意思是同樣的程式你比別人多花一萬倍時間去跑
作者: stucode   2017-10-04 13:02:00
建議原PO從頭思考一下,不只是時間複雜度的問題,你的演算法從一開始就沒有輸出正確結果。例如:ab跟aa
作者: MOONRAKER (㊣牛鶴鰻毛人)   2017-10-04 13:10:00
for最討厭的就是在for裡面更動迴圈計數器(控制變數)
作者: Schottky (順風相送)   2017-10-04 13:11:00
對啦,(abcde, aaaaa) 或 (abcdef, aaabbb) 這種組合
作者: MOONRAKER (㊣牛鶴鰻毛人)   2017-10-04 13:11:00
雖然C不太管 但是有兩個counter同時前進 條件也不一定正常應該用while做
作者: Schottky (順風相送)   2017-10-04 13:47:00
多贈送一組測資 (abc, abcskdfjskghdfkjghd)其實題目有提示正確的演算法了,麻煩把題目再看一次...
作者: peterwu4 (notd)   2017-10-04 18:38:00
原po是用286在算嗎?XDD 終止條件設字串長度就好了
作者: ketchupgood (番茄醬)   2017-10-04 18:44:00
沒 我只是天生反骨不想用提示做而已……提示做法我已經花10分鐘打完了
作者: Schottky (順風相送)   2017-10-04 18:53:00
喔喔喔,原來是太強所以要做自我挑戰嗎這題如果讓我來做,會把兩個字串都sort過再strcmp即可
作者: MOONRAKER (㊣牛鶴鰻毛人)   2017-10-04 21:58:00
SORT?
作者: Schottky (順風相送)   2017-10-04 22:32:00
對,字串中的字母照順序重排,在這題就順便剔除非字母兩個字串如果是同一組字母的不同排列sort過自然會變相同這個作法複雜度不如題目提示的distribution counting快
作者: CoNsTaR ((const *))   2017-10-04 22:37:00
其實題目的做法不也是先做 bucket sort 再比較兩個陣列嗎
作者: Schottky (順風相送)   2017-10-05 02:38:00
可以視為distribution sort或bucket sort的前半部沒錯如果要我為我的方法想些廣告單上的亮點,我想應該會是很好寫,兩個 qsort() 一個 strcmp() 就收工了但題目的方法可以處理接近無限大的字串,完全望塵莫及實際上如何做,留給原PO腦力激盪一下,顯然不能用scanf我說的不一定對就是了,也許我今天也喝了兩瓶高粱發酒瘋

Links booklink

Contact Us: admin [ a t ] ucptt.com