看板 C_and_CPP 關於我們 聯絡資訊
作業二寫到一半,有一點心得一定要分享一下 免得有人跟我一樣浪費很多時間 T_T 我們已經知道 cppgm 是一個作業接著一個作業,而每一個都會用到前 一個的結果,如果你直接在演算法的內部,一算出答案的時候,沒有 把那些東西保存在某個資料結構裡面,就直接利用那些變數輸出,那 等到下一次作業的時候,你就會很痛苦,因為你沒有方便的方法可以 取得前一次的答案,你不會想要重新去 parse 前一次輸出的東西。 他給的程式碼,有一個 class 方便你輸出成他要的格式,這個可以使 用沒問題,但是不要在你剛判斷出答案的時候就直接呼叫他進行輸出。 我建議把運算的結果,都先保存到一個資料結構裡面。等到全部計算 完畢,再用一個迴圈一次全部輸出。 好處是 1. 不管怎樣,你總歸需要把資料保存起來,以供後續使用 2. 先思考資料結構的設計,會讓你的程式架構清楚很多 我寫作業一的時候,就是一邊寫,一邊慢慢的 refactoring 一直維持程式的架構,途中沒有遇到什麼大困難, 就一個一個 case 解決,順利 all pass。 作業二這次, 我想說「不管,直接先把所有的 case 衝過,然後再慢慢 refactoring」 結果衝到剩下兩個 case 的時候,發現沒辦法了,程式太醜了,改不動了, 因為幾乎沒有保存什麼資料結構,所以稍微複雜一點的要求就很難很難作。 所以還是得回去作 refactoring,把程式改好,才能繼續做下去, 但是因為已經累積了很多的程式碼,所以這次 refactoring 非常痛苦, 花了很多很多時間以後才把程式改成「本來就該是這樣」的樣貌。 非常後悔自己一開始沒有先設計資料結構,就硬著腦袋下去寫。 血淚的建議: 1. 先設計你要怎麼保存這次作業的答案的資料結構 2. 把輸入轉成資料結構 3. 從資料結構再進行輸出 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.141.224
loveme00835:謝謝分享 Q_Q 03/31 03:17
bs10:謝謝yoco的建議~ 03/31 19:17
yoco315:終於完成 pa2 寫的超爛 Orz 我要再花三天慢慢 refactor 04/01 01:10
o07608:我懷疑三樓這句話的可信度 OwO 04/01 01:13
jackace:先存的話 在做pa3測資300的時候記憶體用量要小心 04/01 13:06
jackace:但也不能不存 否則pa4 macro取代很難做 04/01 13:08