批改說明:
題目要求寫演算法,就必須要寫輸入與輸出 如果是要求寫程序,則不一定要寫輸入與輸出 題目要求寫時間複雜度,一定要寫成O(n)這種形式,不要只寫n而已 (這次沒有全扣) 每題演算法的輸入與輸出都是佔1分 每題演算法與程序中有錯的一個地方都是扣1分,直到扣到該題的總分為止 第一題: 輸入必須要寫到A矩陣與B矩陣的大小;輸出則一定要寫C=A*B和C的大小 題目中給的A、B與C矩陣的大小分別為n*p、p*m與n*m 有的同學雖然演算法寫對,但是A、B與C矩陣的大小與題目不符 所以會扣一點點分數,以後請注意~ 第二題:(不一定要寫輸入與輸出) 這題有一個常見的小錯誤是,沒有輸出F0 題目中有寫到輸出時必須包含到F0 另外,在遞迴版的程序中 有些同學可能顧慮到寫 if(n==0 || n==1) return n; 會造成程式中止 (因為n等於0時就會變成return 0;) 所以會寫成 if(n==0 || n==1) return 1; 我沒有扣分,因為意思有表達到 第三題: 寫任一種排序都可,就算寫的不是很標準的排序演算法 但是可以順利排序完成都會給分 第四題: 線性搜尋有一個較嚴重的問題是 如果在資料中全部找一遍,沒有找到才會return -1;或output-1; 但是有不少同學是這樣寫 for(i=0; i<n; i++) { if(data[i] == x) return i; else return -1; } 會造成一個情況是,如果找第一筆資料不是x就會馬上return 這個錯會扣2分,是比較嚴重的錯誤 (c)小題是用時間複雜度"分析"兩種演算法 所以如果只有寫時間複雜度而沒有分析的話,會扣2分 分析表示要說明為什麼這兩種演算法的時間複雜度會是O(n)與O(logn) (d)小題要比較 常見錯誤是沒有寫到二元搜尋在使用前需要先排序資料 與 沒有提到資料量大小時的使用時機 第五題: 都是程式觀念錯誤居多,例如 void push(int element) { ... ... return stack[top]; // funtion的回傳型態是void,表示不能return除了null以外的,且push本就不用回傳 } 或者 void pop()// 要寫成int pop() { ... ... return stack[top--]; } 第六題: 正確與否是1分,解釋是1分 解釋要詳細提到c與n0或是c1、c2與n0是多少 第七題: 寫輸入時,註明一下迷宮大小會比較好 其他沒什麼大問題 第八題: 大概是輸入與輸出有點語病 底下這樣寫是不是會變成只要輸出一個隨便的後序運算式即可? (根本不用管輸入的中序是長甚麼樣子) 輸入:中序運算式 輸出:後序運算式 應該要寫成這個意思 輸出:輸入之中序運算式的後序表示法 其他沒什麼大問題
----------------------------------------------------------