--- tags: 初階班 --- # 10th 程式設計班 入班考題解 ## 初階班 ### 第1題(陳) > 復旦程設班課程中學習的程式語言為何? 想必這不需要題解了 請各位記住我們復旦程設班所教的是C++ :poop: ### 第2題(陳) > 下列哪一個程式碼只能在 ans 值為 1 時正確輸出 hello,fdcs ? 設定變數的值時,我們用=來將值存入變數中 ```cpp= int ans=1;//宣告一個名稱為ans的變數,其中儲存的值為1 ``` 而當我們用if來判斷等式是否成立時 我們用==讓if判斷變數中的值是否與右邊的數相同 ```cpp= if(ans==1)//判斷ans是否等於1 { cout<<"hello,fdcs";//ans等於1,判斷式成立,執行此行程式碼 } ``` 然而,如果我們把選項2的程式碼丟進編譯器執行,會發現程式碼輸出了hello,fdcs ```cpp= #include<iostream> using namespace std; int main() { int ans=1; if(ans=1) { cout<<"hello,fdcs"; } } ``` 但是這個程式碼在ans為任何值的時候都會輸出hello,fdcs(if形同虛設) 因此不符合題幹要求的「只能在 ans 值為 1 時正確輸出 hello,fdcs」 故不能選擇選項2 ### 第3題(陳) > 下列哪一個程式碼可以正確輸出21(整數)? C++的乘法運算子是 * 也就是說我們在程式碼中進行乘法運算時,用 * 來讓其左右兩邊的數相乘 所以 ```cpp= cout<< 3 * 7 <<endl; ``` 會輸出21(3乘7) 而 ^ 是邏輯運算子中的XOR ** 則是目前不會學到的,是指向指標的指標(簡單來說它與四則運算根本沒有關係) ### 第4題(羅) >請判斷下列程式碼之輸出? ![](https://i.imgur.com/7NLULma.png) C++有一個規定是:變數名稱不能有任何全形文字,當然也包括中文字 另外如果變數名稱沒有中文,那答案會是120,也就是5! ### 第5題(羅) >請問下列有關跳脫字元的說明,何者正確? >‘\b’ 是倒退一格 ```ANS``` >‘\t’ 是歸位 >‘\m’ 是跳格 >‘\n’ 是字串結束字元 其實這些跳脫字元幾乎都不會用到,但還是要有點印象 - ‘\a’ 是警告音 - ‘\b’ 是倒退一格 - ‘\n’ 是換行 - ‘\r’ 是歸位 - ‘\t’ 是跳格 - ‘\0’ 是字串結束字元 ### 第6題(羅) > 請判斷下列程式碼之輸出? > ![](https://i.imgur.com/AX5b6YJ.png) > 無法編譯,因為 int a = 5; 前面沒加 std:: > 無法編譯,因為 return 0 前面沒加 std:: > 無法編譯,因為 endl 前面沒加 std:: ```ANS``` > 5 我們之所以要加std::是因為有些C++ 的東西是C沒有的,所以要使用C++ 獨有的函式或物件都要加std:: ### 第7題(羅) >請判斷下列程式碼之輸出? >![](https://i.imgur.com/C4oLY2D.png) 在C++中,```!```的意思就是否定,所以```非0```的數前面加上```!```就會變成```0``` 相對的,```0```前面加上```!```就是```1``` ### 第8題(方) > 下列哪個程式碼可輸出1連加到100的值? 就只是眼幹題 唯一要注意的只有選項一的`while` ![](https://i.imgur.com/PY6AWYQ.png) 是先跑判斷 再執行大括號的程式碼 所以只有1 ~ 99 而已 ### 第9題(方) > 懶的貼圖片 :poop: ,反正就一堆 && 和 || 那題 > ![](https://i.imgur.com/0oxiAQn.png) 陷阱就是 && 在程式內優先於 || 然後就...... 慢慢算~ ### 第10題(方) > 還是懶的貼圖片 :poop: ,反正就for跑到21783648那題 > ![](https://i.imgur.com/9laSNIJ.png) 概念就是雖然我們在for裡用了"小於"這個符號 但當電腦千辛萬苦地跑到2147483647的時候 他會先再將 i 加 1 之後 才去和217483648比大小 然而加一的時候 大家知道的 boom 溢位囉~ ### 第11題(陳) > 老千是一個技術很爛卻又喜歡ps主機遊戲的傢伙。作為稀少的主機遊戲玩家,老千在ps主機遊戲的路上一直是孤寂的。然而有一天,他卻突然欣喜的發現,程設班竟然有人玩過p5! > 他們當下決定組成一個「p5賽高團」,但對方卻要求老千,要用C++寫出輸出「p5天下第一!」的程式碼(不含引號)。老千作為hp與p5的雙粉,想要讓對方知道捲髮基因的強大,決定除了對方要求的輸出文字以外,他還要在「p5天下第一!」後換行輸出「眾所周知波特的基因是強大的,就連雨宮蓮也無法避免!」(不含引號)。 > 雖然老千的名字叫做老千,但出老千當然不能解決以上的一切,所以就得拜託你,幫忙看看哪一個程式碼能輸出老千要輸出的文字。 這一題的題敘雖長,但就是叫我們判斷哪個程式碼能輸出下列文字 > p5天下第一! > 眾所周知波特的基因是強大的,就連雨宮蓮也無法避免! ![](https://i.imgur.com/RJGSdJj.png) 選項A的程式碼雖然可以執行,但在輸出「p5天下第一!」後並沒有換行,故不能選 ![](https://i.imgur.com/SLxmTni.png) 在換行的時候,我們會使用 \n 或 endl 來告訴電腦我們要換行 而選項B將 endl 打成了 end ,因此會無法執行 ![](https://i.imgur.com/MtUdgJp.png) 題目要求第二行要輸出「眾所周知 **波特** 的基因是強大的,就連 **雨宮蓮** 也無法避免!」 然而選項D第二行輸出的是「眾所周知 **雨宮蓮** 的基因是強大的,就連 **波特** 也無法避免!」 ![](https://i.imgur.com/pgW0Ysq.png) 看看這標誌性的捲髮跟眼鏡,~~這不就是哈利波特嗎~~ ### 第12題(陳) > 聖誕節,眾所周知,是孩子們夢寐以求的節日。雖然老千名字叫做老千,但他對天發誓他只不過是一個孩子啊! > 而今年的老千特別特別期待聖誕節,因為他今年向聖誕老公公許願要伊蘇8的遊戲光碟。他躺在床上,卻輾轉難眠,眼看一點將至,頓時有一個龐然大物出現在窗台。(然而很遺憾沒有山跟樹可以拔跟倒) > 是聖誕老公公! > 老千興奮的準備領取自己的聖誕禮物,聖誕老公公卻告訴他,因為儲存老千聖誕禮物是什麼的變數型態被搞錯,變數溢位讓聖誕老公公不知道老千想要的聖誕禮物是什麼,只好拿switch的遊戲卡來濫竽充數。然而我們都知道,switch跟ps的遊戲光碟與遊戲卡是天與地的差別。而只玩ps主機的老千,注定錯過了他心心念念的伊蘇8。 > 悲憤無比的老千,決定找出聖誕老公公到底用成什麼資料型態才會溢位。 > 聖誕老公公告訴老千: > 一、儲存他的聖誕禮物是什麼的變數,儲存的值是2147483648。 > 二、那個變數的資料型態是整數資料型態的一種。 > 那麼,請聰明的你幫助老千找出聖誕老公公用的資料型態吧! 這一題只要知道題目在問什麼,就會發現其實這題十分簡單 > 儲存老千聖誕禮物是什麼的變數型態被搞錯,變數溢位 > 儲存他的聖誕禮物是什麼的變數,儲存的值是2147483648 也就是說,我們要找出儲存2147483648時,會發生溢位的資料型態 C++中的每個資料型態都有它能儲存的數值的固定範圍 只要超過這個範圍,數值就會因此而無法被正確的儲存,這便是溢位 以下是三個選項的資料型態的範圍 | 資料型態 | 表示範圍 | | -------- | -------- | | int | $-2,147,483,648$ ~ $2,147,483,647$ | | unsigned int | $0$ ~ $4,294,967,295$ | | long long | $-9,223,372,036,854,775,808$ ~ $9,223,372,036,854,775,807$ | 比對過後,只有int的範圍沒有包含到2147483648 因此int是答案 順帶一提,這就是題目中提及的伊蘇8 ![](https://i.imgur.com/wVOMMDz.png) ### 第13題(羅) >請判斷下列程式碼之輸出? >![](https://i.imgur.com/zcZM5KZ.png) >答案:```0.0825``` 其實這題算是簡單的數學題,只要有技巧的分向對消就好 將for迴圈拆開我們就會得到以下的式子 $\dfrac{1}{2 \times 3 \times 4} + \dfrac{1}{3 \times 4 \times 5} + \cdot\cdot\cdot + \dfrac{1}{22 \times 23 \times 24} + \dfrac{1}{23 \times 24 \times 25}$ 我們先看第一個分數 $\dfrac{1}{2 \times 3 \times 4} = (\dfrac{1}{2 \times 3} - \dfrac{1}{3 \times 4}) \div 2$ 所以原式就會等於 $[(\dfrac{1}{2 \times 3} - \dfrac{1}{3 \times 4}) + (\dfrac{1}{3 \times 4} - \dfrac{1}{4 \times 5}) + \cdot\cdot\cdot + (\dfrac{1}{22 \times 23} - \dfrac{1}{23 \times 24}) +(\dfrac{1}{23 \times 24} - \dfrac{1}{24 \times 25})] \div2$ 把相同項消除後就會得到 $(\dfrac{1}{2 \times 3} - \dfrac{1}{24 \times 25}) \div2$ 算出來就是```0.0825``` ### 第14題(方) > 難題,口頭講 > ![](https://i.imgur.com/3kgDSZW.png) > ans:```僅甲丙丁戊庚辛``` ### 第15題(方) > 自肥題,口頭講 > ![](https://i.imgur.com/8ktiiln.png) > ![](https://i.imgur.com/Tj1Iul2.png) > ans:```1/1000``` ## 進階題 想問就說,進階組會趕到現場講解,不想問就算了 :poop: ### 第一題(傅) >程式可以拿來做許多的事情,而最需要程式來做的事,莫過於重複性高的事情了。像是在一群數字裡面搜尋特定的數字、找最大公因數、計算複雜算式等。而科學家在研究「搜尋」時,想出了叫做二分搜尋的東西。二分搜尋是把一群數字由小排到大,然後從中間開始找,如果中間的數比要找的數大,那就往左邊找,反之就往右邊找。由此一來,程式的複雜度就會被壓到O(lgN)。但是這樣就產生了一個問題——怎麼有效率的排序?其實也很簡單,同樣都用「二分」的概念來做就好了。下面的程式碼寫的就是這種「二分」排序法,只是有幾格不見了,請你幫忙把格子內正確的程式碼寫出來。 (作答樣式為: A : ------, B : ------, C : ------, ......) >![](https://i.imgur.com/s7EtRZD.png) ans: ``` A <vector> B vt, l, mid C vt, mid+1, r D lt != lv.end() && rt != rv.end() E lt != lv.end() F rt != rv.end() ``` ### 第二題(吳) >![](https://i.imgur.com/wCLWhPs.png) ans:```381654729``` ### 第三題(郭) >請根據下列條件,寫出符合條件之程式碼。(可不顧慮排版) >![](https://i.imgur.com/2WuQ8vp.png) >```cpp= >int fib (int n) { > //Start from here >} ans: ```cpp= if(n < 3) return n; return fib (n - 1) + fib (n - 2) % 7 ? fib (n - 1) + fib (n - 2) : 0 ```