單班計程期中考參考解答
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
11/10 22:19, 2F
推
11/10 23:41, , 3F
11/10 23:41, 3F
推
11/13 01:03, , 4F
11/13 01:03, 4F
推
11/13 23:16, , 5F
11/13 23:16, 5F