# 課程學習成果一 ###### tags: `學習歷程` [TOC] ## 台南一中APCS選修課程與心得 ### 摘要 此報告是用來記錄學生鍾詠傑在高一參加台南一中APCS選修課程時,順帶紀錄之心得,內容包含課程內容簡介,課表,期末測驗與當班長的大小事。 ### 作品說明 本課以 APCS大學程式先修檢定 為目標。 內容以 APCS、資訊學科能力測驗、以及資訊奧林匹亞所著重的實作能力為主,筆試為輔。 使用程式語言為 C++,課程中會學習演算法與資料結構,以及它們的實作與應用。 練習以 UVa Online Judge 及其它各大 OJ 為主。 ### 正文 #### 課表 以下列出這學期所預計學習內容 第一週:字串與IO 第二週:陣列與指標 第三週:複雜度分析與數論 第四週:遞迴 第五週:排序 第六週:二分搜尋 第七週:資料結構 第八週:資料結構 第九週:STL 第十週:暴搜 第十一週:暴搜 第十二週:圖論 第十三週:圖論 第十四週:貪心、分治 第十五週:動態規劃 第十六週:動態規劃 第十七週:動態規劃 第十八週:字串匹配 #### 開學 第一天到教室上課時,發現是我們資訊社的社師開的課,於是自告奮勇當了班長,負責每天點名、成績計算、送紀錄簿到教務處並寫每天的課程摘要。因為上課內容早已自學過,所以老師除了讓我先往後學習以外、能做自己的事,也算是班長的小小福利吧。 #### 上課流程 每周五早上兩節課是上課時間,上半節課50分鐘主要是老師介紹今天要學習的語法或演算法,老師會以HACKMD上的講義結合實作演示。通常也會示範一兩題UVAOJ上的題目。 [UVAOJ](https://onlinejudge.org/index.php) 下半節課透過學生的自我練習與測試來練習及驗收今天學習成果,同時也是學生詢問問題的時間。 由於已經學過相關內容,我也會擔任小助教來教我身邊那些非資訊社的同學,這也是我擔任資訊相關教學人員的啟蒙,也讓我能夠有勇氣向更多人展示我的長才。 #### 期末測驗 期末測驗由老師在Virtual Judge上出四題的考題作為期末考題,只要解一半的題目學期成績就通過了。 不過擔心期末沒過的學生也可以在平時交出解題的程式碼來當作平時成績的加分,或是參加APCS大學程式先修檢定以檢定代替期末成績。 [Virtual Judge](https://vjudge.net/) 期末測驗code: 第一題 ```cpp= #include<bits/stdc++.h> using namespace std; int main() { // ios::sync_with_stdio(0); // cin.tie(0); cout<<""<<endl<<"""""""""""""""""" return 0; } ``` 第2題 ```cpp= #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin>>n; string a; for(int m=0;m<n;m++){ cin>>a; if(a=="IF"){ cout<<2<<endl<<4<<endl<<1<<endl<<4<<endl; } return 0; } ``` 第三題 ```cpp= #include<bits/stdc++.h> using namespace std; string pho[10005] ; int main() { ios::sync_with_stdio(0); cin.tie(0); int t; int n; cin>>t; bool cases,casel; for(int m=0;m<t;m++){ casel=0; cases=0; cin>>n; for(int o=0;o<n;o++){ cin>>pho[o]; } for(int o=0;o<n-1;o++){//窮舉 for(int o2=o+1;o2<n;o2++){ if(o!=o2){ if(pho[o].size()<=pho[o2].size()){ // cout<<o<<" "<<o2<<endl; //測試窮舉 for(int y=0;y<pho[o].size();y++){ if(pho[o][y]!=pho[o2][y]){//比對字串 cases =1; } } if(cases==0){ casel=1; break; } } } if(casel==1){ break; } } if(casel==1){ cout<<"NO"<<endl; break; }else{ cout<<"YES"<<endl; break; } } } return 0; } ``` 第四題 ```cpp= #include<bits/stdc++.h> using namespace std; int main() { // ios::sync_with_stdio(0); // cin.tie(0); int n; cin>>n; for(int o=0;o<n-1;o++)//窮舉 for(int o2=o+1;o2<n;o2++) cout<<o<<" "<<o2<<endl; return 0; } ``` ### 心得反思 透過課程,我們得以用最佳的策略去分析APCS選修題目,讓我們在程式碼的大海中遨遊,在題目之中的縫隙間找出解答。這門課讓我們得到了一個全新的觀點去思考這個問題。看看別人的解法,再想想自己,會發現問題的核心其實就在你身旁。每堂課結束前最急迫的事,想必就是釐清疑惑了。現在,APCS選修在高中升學中,是非常非常重要的。有一句發人省思的話,人的生活離不開程式,但要真正的了解程式才是不容易;學習總需要忠誠去播種,用熱情去灌溉,用原則去培養。這也是我在資訊領域教學他人的開始。