# 前言 ### **高一基礎程式設計期末考** # Scoreboard :::spoiler **scoreboard** [Scoreboard](http://skyoj.tnfsh.tn.edu.tw/sky/index.php/contest/scoreboard/581) ::: # 考試過程 ### **心態** **一開始本來打算從 $pA$ 寫到 $pE$ 的** **結果 $pA$ 的題敘太長 & 我看不懂** **所以就跳 $pE$ 解了** **然後深綠被搶了兩題:D** ### **解題順序** $$pE \to pD \to pC \to pB \to pA$$ $14:27$ $pE$ <font color = "green">$AC$</font> $14:28$ $pD$ <font color = "green">$AC$</font> $14:31$ $pC$ <font color = "green">$AC$</font> $14:33$ $pB$ <font color = "green">$AC$</font> $14:37$ $pA$ <font color = "red">$WA$</font> $14:38$ $pA$ <font color = "green">$AC(second \space submission)$</font> **總計 :** $11$ $mins$ $\space\space$ <font color = "green">$5$ $AC$</font> $\space$ <font color = "red">$1$ $WA$</font> # **題目** ### **pA 可憐哪** **難度 : :star:** :::success **題意 :** **給一數 $N$** **有一值 $poor\_value$ 會隨著 $N$ 而變動** **規則如下 :** * **假如 $N \le 24$ 則 $poor\_value$ + 1** * **如果 $25 \le N \le 3 \times 24$ 則 $poor\_value$ + 2** * **如果 $3 \times 24 < N \le 7 \times 24$ 則 $poor\_value$ + 3** * **如果 $7 \times 24 < N$ 則 $poor\_value$ + 5** **接著根據$poor\_value$的值輸出** * **如果 $poor\_value \le 24$ 輸出 "Poor\~\~"(不含引號)** * **如果 $25 \le poor\_value \le 60$ 輸出 "Poor You!"(不含引號)** * **如果 $61 \le poor\_value \le 100$ 輸出 "Pathetic!!"(不含引號)** * **如果 $101 \le poor\_value \le 200$ 輸出 "Ko lan na\~\~\~"(不含引號)** * **如果 $201 \le poor\_value$ 輸出 "Nonsense post!!!!"(不含引號)** **範例輸入1 :** ``` 2 ``` **範例輸出1 :** ``` Poor~~ ``` **範例輸入2 :** ``` 300 ``` **範例輸出2 :** ``` Nonsense post!!!! ``` ::: :::warning **想法 :** **簡單題if else題** **沒給 $N$ 範圍 但感覺 $poor\_value$值會溢位** **所以我有開long long** ::: <hr> :::spoiler <font color = "gold">**code**</font> ```cpp= #include <iostream> using namespace std; int main() { ios::sync_with_stdio(false), cin.tie(0); int n; cin >> n; long long pov = 0; if(n <= 24) { pov = n; } else if(n <= 3*24) { pov = 24 + (n-24)*(2); } else if(n <= 7*24) { pov = 24 + (2*24)*(2) + (n-3*24)*(3); } else { pov = 24 + (2*24)*(2) + (4*24)*(3) + (n-7*24)*(5); } if(pov <= 24) { cout << "Poor~~\n"; } else if(pov <= 60) { cout << "Poor You!\n"; } else if(pov <= 100) { cout << "Pathetic!!\n"; } else if(pov <= 200) { cout << "Ko lan na~~~\n"; } else { cout << "Nonsense post!!!!\n"; } } ``` ::: <hr> :::info **解題心得 :** **放了一張韓國瑜帥臉害我看很久題敘:(** ::: ### **pB 小蘿莉的數學家教B** **難度 : :star:** :::success **題意 :** **給二數 $B$ $H$** **$1 \le B, H \le 10^6$** **代表著平行四邊形的底與高** **畫平行四邊形及輸出相關資訊** **格式請見範例輸出** **範例輸入 :** ``` 4 5 ``` **範例輸出 :** ``` **** **** **** **** **** Height: 5 Base: 4 Area: 5*4=20 ``` ::: :::warning **想法 :** **簡單實作題** **但要小心 $B \times H \le 10^{12}$** **要開long long** ::: <hr> :::spoiler <font color = "gold">**code**</font> ```cpp= #include <iostream> using namespace std; signed main() { int b, h; cin >> b >> h; for(int i = 0; i < h; i++) { for(int j = 0; j < i; j++) { cout << ' '; } for(int j = 0; j < b; j++) { cout << '*'; } cout << '\n'; } cout << "Height: " << h << '\n'; cout << "Base: " << b << '\n'; cout << "Area: " << h << '*' << b << '=' << (long long)h*b << '\n'; } ``` ::: <hr> :::info **解題心得 :** **考的時候總感覺我這題寫很慢** **結果看了一下時間** **好像也才 $2 \space minutes$ :thinking_face:** ::: ### **pC 數字方塊** **難度 : :star:** :::success **題意 :** **給一數 $N$** **要求輸出 $N \times N$ 的方格** **格式請見範例輸出** **範例輸入 :** ``` 4 ``` **範例輸出 :** ``` 1234 2343 3432 4321 ``` ::: :::warning **想法 :** **簡單巢狀題** **但我偏偏挑了一個難實作的解法XD** ::: <hr> :::spoiler <font color = "gold">**code**</font> 1. **一般解法** ```cpp= #include <iostream> using namespace std; int main() { int n; cin >> n; for(int i = 1; i <= n; i++) { for(int j = i; j <= n; j++) { cout << j; } // n-i+1現場跑測資然後再通靈就行 for(int j = n-1; j >= n-i+1; j--) { cout << j; } cout << '\n'; } } ``` 2. **我那時候的解法 (看看就行)** ```cpp= #include <iostream> using namespace std; int main() { int n; cin >> n; for(int i = 1; i <= n; i++) { int id = i, t = 0; int e = 1; while(t != n) { if(id==n) { e = -1; } cout << id; id += e; t++; } cout << '\n'; } } ``` ::: <hr> :::info **解題心得 :** **那時候把這題想太難了XD** ::: ### **pD 化簡分數** **難度 : :star: :star:** :::success **題意 :** **給二數 $P$ $Q$ 代表 分子與分母** **輸出最簡分數即可** **格式請見範例輸出** **範例輸入 :** ``` 2 4 ``` **範例輸出 :** ``` 1 / 2 ``` ::: :::warning **想法 :** **題目沒給 $P$ $Q$ 範圍 所以不開long long :D** **簡單GCD題** ::: <hr> :::spoiler <font color = "gold">**code**</font> 1. **函式解法** ```cpp= #include <iostream> #include <algorithm> // 要用__gcd的話記得要導入這個標頭檔 // #include <bits/stdc++.h> 或者這個 using namespace std; int main() { int p, q; cin >> p >> q; int g = __gcd(p, q); cout << p/g << " / " << q/g << '\n'; } ``` 2. **輾轉相除法** ```cpp= #include <iostream> using namespace std; int main() { int p, q; cin >> p >> q; int a = p, b = q; // 記得要先把p q存起來or複製 // 不然輾轉相除法會動到原本的值 int g; while(a != 0){ g = a; a = b % a; b = g; } cout << p/g << " / " << q/g << '\n'; } ``` ::: <hr> :::info **解題心得 :** **之前有做過p, q為負數的** **結果這題沒有 好水XD** **但這題的難度對新手來說算難了** **畢竟沒有人會閒到去背輾轉相除法吧 LOL** ::: ### **pE 伸縮乘法表** **難度 : :star:** :::success **題意 :** **給二數 $N$ $M$ 代表著乘法表的列與行數** **按照格式輸出乘法表即可** **$1 \le N, M \le 1000$** **範例輸入 :** ``` 3 4 ``` **範例輸出 :** ``` 1*1=1 1*2=2 1*3=3 1*4=4 2*1=2 2*2=4 2*3=6 2*4=8 3*1=3 3*2=6 3*3=9 3*4=12 ``` **當然每個等式的最後都有一個空格!** ::: :::warning **想法 :** **巢狀迴圈基礎題 + 判斷$N \times M \le 10^6$** **所以不用開long long** ::: <hr> :::spoiler <font color = "gold">**code**</font> ```cpp= #include <iostream> using namespace std; int main() { int n, m; cin >> n >> m; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { cout << i << '*' << j << '=' << i*j << ' '; } cout << '\n'; } } ``` ::: <hr> :::info **解題心得 :** **實作起來沒有很困難** **水題** ::: # 總結 **這次考試雖然考的範圍比較廣** **但好像比較簡單(?** **~~至少我破台的時間有變快ㄏㄏ~~** **最後放一張芙莉蓮 慶祝大家資訊一百分:D** **希望大家能喜歡資訊這項學科 :satisfied:** ![202312011716097711](https://hackmd.io/_uploads/SkrQuF_S0.jpg)