1. 程式人生 > >畢業十年後,我忍不住出了一份程式設計師的高考試卷

畢業十年後,我忍不住出了一份程式設計師的高考試卷

個人原創,首發於:五分鐘學演算法:畢業十年後,我忍不住出了一份程式設計師的高考試卷

 

一、選擇題(共計 50 分)

1、在下列四種排序演算法,只有( )是一種不穩定排序

A、氣泡排序

B、選擇排序
C、插入排序

D、歸併排序

 

2、一個數組,含有大量重複元素,使用( )進行排序是一種合理的抉擇

A、快速排序

B、雙路快速排序

C、三路快速排序

D、希爾排序

 

3、楊輝三角,是二項式係數在三角形中的一種幾何排列,在中國南宋數學家楊輝 1261 年所著的( )一書中出現,LeetCode 上第 ( )和( )就是與楊輝三角有關的題目。

A、《詳解八章演算法》、118 、119

B、《詳解九章演算法》、118 、119

C、《詳解八章演算法》、139 、140

D、《詳解九章演算法》、139 、140

 

4、小吳想執行某項破壞性的操作,比如快速刪除系統元素,使用( )方式可以幫助我更好的完成這個任務

A、二叉樹的前序遍歷

B、二叉樹的中序遍歷

C、二叉樹的後序遍歷

D、二叉樹的層序遍歷

 

5、在《演算法導論》第二版第 7 章(快速排序)的思考題(第 95 頁)中提及到一種低效的遞迴排序演算法, Howard、Fine 等教授將這個演算法稱為 ( )

A、垃圾排序

B、完美排序

C、變種快速排序

C、HF 排序

 

6、(多選)如果程式設計師小吳將下面這張圖裡面的文章寫完,將會 ( )

 

 

A、收到律師函

B、學會打籃球

C、學會 RAP

D、文章閱讀十萬加

 

7、下列哪個短語縮寫不是程式設計師常見某些演算法的簡稱()

A、KMP

B、MMP

C、DP

D、A*

 

8、有一種玻璃杯質量確定但未知,需要檢測。現在有一棟 100 層的大樓,該種玻璃杯從某一層樓扔下,剛好會碎。現給你兩個杯子,問怎樣檢測出這個杯子的質量,即找到在哪一層樓剛好會碎? 現在有一種解法是從數學方程的角度出發。假設最少嘗試次數為 x ,那麼,第一個杯子必須要從第 x 層扔下,因為:如果碎了,前面還有 x - 1 層樓可以嘗試,如果沒碎,後面還有 x-1 次機會。

  • 如果沒碎,第一個杯子,第二次就可以從 x +(x - 1)層進行嘗試,這裡加上 x - 1,是因為當此時,第一個杯子碎了,第二個杯子還有可以從 x + 1 到 ( x + (x - 1) - 1 ) 層進行嘗試,有 x - 2 次機會。

  • 如果還沒碎,那第一個杯子,第三次從 x + (x - 1) + (x - 2)層嘗試。不管杯子碎或者沒碎,都有 x - 3 次嘗試機會,依次類推。

  那麼經過 x 次的嘗試可以確定最高的樓層為 x + (x - 1) + (x - 2) + … + 1 = x(x+1) / 2 。

  請問,x 是多少?

A、2

B、10

C、14

D、25

 

9、假設你在參加一個春節抽獎遊戲,主持人在三個紅包裡面分別放了 1 塊錢、1 塊錢和 1000 塊錢。你選中哪一個,你就可以領到對應的錢。當你選定一個紅包之後,主持人獨自翻開剩下兩個紅包,然後將有一塊錢的紅包給你看。此時,給你一次機會選另外一個紅包。請問:應不應該換?

A、換

B、不換

C、可以換,但沒必要

D、都可以

 

10、LeetCode 第 9 號問題是迴文數求解,它有很多種解法,下面動圖的解法屬於( )

 

 

A、語文解法

B、數學解法

C、英語解法

D、體育解法

 

二、填空題(共計 20 分)

11、第一篇二分搜尋論文是 1946 年發表,然而第一個沒有 bug 的二分查詢法卻是在 ( ) 年才出現,中間用了 ( ) 年的時間。

12、我們常說有五大演算法,它們分別是 —— 分治演算法、動態規劃、( )、( )、分支限定。

13、印度數學奇才拉馬努金(Srinivasa Ramanujan)是二十世紀最傳奇的數學家之一,他獨立發現了近 3900 個數學公式和命題,雖然他幾乎沒受過正規的高等數學教育,卻能憑直覺寫出不平凡的定理和公式,且往往被證明是對的,他留給世人的筆記引發了後來的大量研究。

 下面這張圖就是他的一項發現。

 

 

請問,當 k = 0 時,π 的值為( )

三、程式設計題(共計 30 分)

喜羊羊和灰太狼用幾堆石子在做遊戲。偶數堆石子排成一行,每堆都有正整數顆石子 piles[i] 。遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,所以沒有平局。喜羊羊和灰太狼輪流進行,喜羊羊先開始。 每回合,玩家從行的開始或結束處取走整堆石頭。 這種情況一直持續到沒有更多的石子堆為止,此時手中石子最多的玩家獲勝。假設喜羊羊和灰太狼都發揮出最佳水平,當喜羊羊贏得比賽時返回 true ,當灰太狼贏得比賽時返回 false 。

現在需要你設計一個演算法,來分析它們的輸贏情況。

要求:請使用盡可能少的程式碼將下列程式碼補充完整,不得超過兩行程式碼。

//@author:程式設計師小吳
class Solution {
    public boolean stoneGame(int[] piles) {
        //請在這裡將程式碼補充完整
    }
}

最終答案請在原文連結裡面獲取。

原文連結:五分鐘學演算法:畢業十年後,我忍不住出了一份程式設計師的高考試卷