[課程] 關於單班計程期中考

看板b99902HW作者時間13年前 (2010/11/10 20:07), 編輯推噓4(401)
留言5則, 5人參與, 最新討論串1/1
單班計程期中考參考解答 http://www.csie.ntu.edu.tw/~r98922165/C2010MidtermSolution.zip Problem 1 常見問題 1. 計算過程中沒有在每次做完乘法以後 mod 1000 導致溢位問題 2. 沒有用找cycle的方法來避免重複的計算 導致程式執行時間超過限制 3. 找到cycle以後卻不小心算錯了... Problem 2 注意事項 1. 兩個字串長度不相等也有可能是similar 因為字串裡面非英文字母的字元應該要被無視 很多同學因為搞錯這點而失去了很多分數... 2. The length of a string is no more than 100000. 字串的大小應該要宣告成 100000+1 才夠 因為要保留儲存字串結束字元'\0'的空間 3. 程式的執行時間不能太長 比較快的作法是用陣列存兩個字串中a到z出現的"次數" 再進行比對 部份同學先把字串分別排序以後再進行比對 這個作法其實"慢非常多" 另外 執行strlen需要時間 要用變數把strlen的回傳值存起來重複使用 for(i=0; i<strlen(s); i++) { ... } 上面這段應該改成下面這樣 len=strlen(s); for(i=0; i<len; i++) { ... } Problem 3 常見問題 1. 把座標軸的方向弄錯 或是把東和西弄反之類的... 2. 把各種情況用if-else暴力展開 這樣的寫法雖然沒錯 但很容易導致漏改一個小細節就拿不到分數的情況 而且程式碼會變得比較長 寫的時間跟著變得比較久 de bug 也變得比較困難 * 比較簡潔的寫法可以參考解答 或是來助教的 Office Hour 討論 Problem 4 常見問題 1. 比對字串A是否在字串S裡面的時候 沒有注意到超出字串範圍的問題 假設 字串A是"apple" 字串S是"anappleapp" anappleapp apple 上面的例子中 部分同學的程式只注意不要超過字串A的範圍 卻沒注意到字串S已經對齊到超過範圍的地方了 2. 輸出的字串長度可能將近 1000+30x150=5500 因為輸入的字串長度不超過1000 最多有30個指令 每個指令總長度不超過150 每個指令在最極端的情況下會讓1個字元被替代成150個字元(高估) * 如果真的對處理backward指令有障礙... 可以先把三個字串前後顛倒 然後當成forward指令處理 處理完以後要記得再把處理結果前後顛倒回來 前提是你必須會寫處理forward指令的程式 Problem 5 常見問題 1. 自行假設max的最小值為0或其他的值 但是f(x,y)有可能是負數或其他更小的值唷 拿其中一個f(x,y)的值當max的初始值是比較合適的作法 同時別忘了把*index的初始值設成那一個 2. 部分同學宣告陣列儲存每個f(x,y)的值 但是陣列的大小可能比測試資料需要的小 或是使用傳入的n當陣列大小 會因為陣列大小是變數不是常數而 Compile Error 最重要的是 其實這題不需要宣告一個陣列儲存f(x,y)的值 每算出一個f(x,y)就拿去和max比較就好 * Sample Input 和 Sample Output 的用途 各位同學根據題目的敘述寫好程式碼以後,可以在自己的電腦上編譯程式碼。 如果產生出來的程式是正確的,執行程式的時候, 把 Sample Input 的內容輸入程式,程式輸出的資料應該和 Sample Output 相同。 如果程式無法產生出和 Sample Output 相同的結果,表示程式不符合題目的要求, 程式碼上傳到批改系統自然不會拿到滿分。 這次期中考前三題的第一組測試資料都是 Sample Input , 但是助教發現部份同學上傳的程式連第一組測試資料都無法通過。 提供 Sample Input 和 Sample Output 除了幫助各位同學了解輸入和輸出的格式, 同時希望同學們拿來驗證程式的正確性,加速 de bug 的過程, 所以希望各位同學在上傳程式碼以前,能夠先在電腦上測試執行結果。 * C2010 線上批改系統 一份程式碼上傳到"C2010線上批改系統"之後,程式碼會被編譯並執行。 產生出來的程式會被輸入一些測試資料,如果程式"正常地"執行結束, 批改系統會把該程式的輸出資料拿去和正確答案做比對, 根據比對的結果相同與否給分數。 除了答案以外,請不要printf任何不相關的東西, 像是"請輸入數字"的提示用語,會讓批改系統認為答案是錯的! 以上是助教把大部份期中考的上傳程式碼看過之後 所整理出來的常見問題或注意事項 感謝大家的耐心閱讀 如果對於自己的程式碼為什麼沒有拿到滿分還是有疑問 歡迎來助教們的 Office Hour 詢問 * 曹佐碩: 星期一 12:00-14:00 @ CSIE R334 * 陳柏龍: 星期二 13:20-14:10, 星期四 13:20-14:10 @ CSIE R217 * 蔡青樺: 星期五 16:00-18:00 @ CSIE R217 助教們的 Office Hour 就是在特定的時段 助教會在特定的地點等大家來問和課程相關的問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.46

11/10 20:26, , 1F
推!助教辛苦了<(_ _)>
11/10 20:26, 1F

11/10 22:19, , 2F
喔不…原來我死在S的字串長度上囧
11/10 22:19, 2F

11/10 23:41, , 3F
到期中考還有人會輸出提示訊息喔囧。
11/10 23:41, 3F

11/13 01:03, , 4F
推!! 助教辛苦了m(_ _)m
11/13 01:03, 4F

11/13 23:16, , 5F
樓上卡恩!! <(_ _)>
11/13 23:16, 5F
文章代碼(AID): #1Csehriy (b99902HW)