當前位置:學問君>人在職場>求職指導>

2016阿里巴巴校招C++工程師筆試題目

學問君 人氣:1.46W

本文是小編整理的阿里巴巴校招C++工程師筆試題目,歡迎大家閱讀。

2016阿里巴巴校招C++工程師筆試題目

一、問答題

01機器人每次向前走1步概率是1/2,每次向前走2步概率是1/2,當機器人走的路程是4的整數倍時候結束,求結束時機器人步數的期望

027635412,做堆排序升序,第一輪後的結果

03老公接老婆下班,老公6:20—6:30到,老婆6:25—6:30下辦公樓,如果老公到老婆辦公樓下比老婆晚,就會捱打,求老公捱打概率。

04二進制數0.0011001100110011最接近的10進制數

05中國打算30年後成爲發達國家,生產力翻番,問每年的生產力增長率至少爲多少?

06進程和線程區別

07擲篩子拿獎金,兩次機會,擲得是幾,就拿幾的獎金,比如擲3,則拿3元。第一次擲結束後可以選擇拿獎金離開,也可以選擇再擲一次,如果再擲一次,則只能拿第二次獲得的獎金,求期望

08write pwrite seek fseek 哪個和其他的不同 一個是系統調用一個是庫函數

二、附加

09給出一組整數對 { (a[0], b[0]), (a[1], b[1]) ... (a[n-1], b[n-1]) },所有 a 值 和 b 值分別不重複(任意 i != j 滿足 a != a[j] 且 b != b[j])。構造一棵 n 結點的二叉樹,將這 n 個整數對分配到各個結點上。根和所有子樹滿足以下條件:1) 所有結點的 a 值滿足二叉查找樹的順序,即 left->a < root->a && root->a < right->a;2) 所有結點的 b 值滿足最大堆的順序,即 root->b > left->b && root->b > right->b。

問題一:實現 build 函數,輸入 n 個整數對,返回一棵構造好的`二叉樹。struct pair_t {int a, b;};struct node_t {int a, b;node_t *left, *right;};node_t* build(pair_t* pair, int n);

例如,輸入是 {(5, 8), (2, 10), (4, 3), (1, 5), (0, 2), (9, 1)},輸出是下列二叉樹:

提示:1) 構造出的二叉樹的形態是存在且唯一的。 2) 想辦法確定樹根。

10已知滿足上述條件的二叉樹,設計算法實現插入一個整對 (a, b),使新的二叉樹仍滿足上述條件。該算法比較複雜,候選人只需描述思路。

1、假設目前有3個程序A, B和C,需要相互傳輸數據,我們需要給做一箇中轉程序P。 A 讀寫的數據是經過某壓縮格式azip壓縮過的。B 讀寫的數據需要base64編碼。C 讀寫數據需要壓縮格式bzip壓縮後base64編碼。現在假設已有工具函數 :std::string azip(const std::string& input);std::string aunzip(const std::string& input);std::string base64encode(const std::string& input);std::string base64decode(const std::string& input);bool bzip(const std::string& input, std::string* output);bool bunzip(const std::string& input, std::string* output);請給中轉程序P設計格式轉換的工具類。注意設計的通用性,比如:可能有新的角色加入,要求給做加密解密等。

2、假設我們已有一個函數, int recv(char* buf, int len);這個函數要求你準備一個 buffer,並告訴這個函數這個 buffer 有多長(len),這個函數就會在 buffer 裏填上一些字元,並返回字元的個數(返回值永遠 > 0 )。請寫出這樣一個函數,char* read_line() {// ??? 你要寫的代碼}這個函數不需要任何參數,內部是靠調用 recv() 來拿到一些字元,然後要搜尋回車字元,找到後返回之前的字元,比如,如果 recv() 拿到 "12345678",那第一次調用 read_line(),需要返回 "123"但是請注意,第二次調用時,要返回 "45" (第二行字元竄)第三次調用時,"678" 還沒用掉,可是因爲 678 之後沒有,所以你要繼續調用 recv(),拿到更多字元,假如 recv() 返回 "abc",你有了 "678abc",可是因爲 abc 之後沒有,所以你要繼續調用 recv(),拿到更多字元假如 recv() 返回 "de",你有了 "678abcde", 因爲看到了,所以你可以直接返回 "678abcde" 了。