一、單選題
1、在常用的網路協議中,___是面向連線的、有重傳功能的協議。
A、IP B、TCP C、UDP D、DXP
2、500張多米諾骨牌整齊地排成一列,依順序編號為1、2、3……499、500。第一次拿走所有奇數位置上的骨牌,第二次再從剩餘骨牌中拿走所有奇數位置上的骨牌,依此類推。請問最後剩下的一張骨牌的編號是多少?
A、128 B、250 C、256 D、500
3、兩個執行緒併發執行以下程式碼,假設a是全域性變數,那麼以下輸出______是不可能的?
void foo(){ ++a; printf("%d ",a); }
A、3 2 B、2 3 C、3 3 D、2 2
4、某系統採用36進位制數表示一字串,36個字元0-9 a-z分別由數字0~35表示,則10進位制數字872581表示字串____?
A、imac B、ipad C、iphone D、ipod
5、以下程式碼輸出的是__?
int foo(int x,int y) { if(x<=0||y<=0) return 1; return 3*foo(x-1,y/2); } cout<<foo(3,5)<<endl;
A、81 B、27 C、9 D、3
6、以下資料結構說法,錯誤的是___?
A、紅黑樹插入操作的平均時間複雜度為O(logn),最壞時間複雜度為O(logn)
B、B+樹插入操作的平均時間複雜度為O(logn),最壞時間複雜度為O(logn)
C、Hash表插入操作的平均時間複雜度為O(logn),最壞時間複雜度為O(n)
D、排序連結串列插入操作的平均時間複雜度為O(n),最壞時間複雜度為O(n)
7、哈弗曼編碼是一種無損二進位制熵編碼演算法,其加權路徑長度最小,字串“alibaba”的二進位制哈弗曼編碼有___位(bit)
A、11 B、12 C、13 D、14
8、節點按中序遍歷為xyz的二叉樹可能有幾種?
A、2 B、3 C、4 D、5
9、在4個元素的集合上可定義的互不相同的劃分有___個。
A、14 B、15 C、16 D、17
10、下列關於C語言中指標的說法錯誤的是:___
A、指標的值是一個地址
B、非法指標是指該指標的值不是一個已經分配的記憶體地址
C、兩個指向同型別地址的指標之間做減法是沒有意義的
D、指標的指標佔用的記憶體空間和其他指標佔用的記憶體空間相同
二、不定項選擇
11、設A、B、C為任意集合,下面的命題為真的是____
A、如果A-B=∅,則A=B
B、如果A-C=B-C,則A∩^C=B∩^C
C、如果A∪B=A∪C,則B=C
D、如果A∩B=A∩C,則B=C
E、∅是∅的子集
12、一個棧的入棧序列為ABCDE,則不可能的出戰序列為___
A、ECDBA B、DCEAB C、DECBA D、ABCDE E、EDCBA
13、以下關於記憶體洩漏說法正確的是____(注:此題不太確定,歡迎補充)
A、記憶體洩漏是作業系統記憶體管理出錯導致的問題
B、單執行緒程式不可能記憶體洩漏
C、如果一個程式在執行過程中佔用的記憶體無限制上升,那麼該程式有記憶體洩漏
D、只要程式在退出之前釋放了所有分配的記憶體,那麼就不會記憶體洩漏
E、記憶體洩漏是僅僅出現在C/C++程式的問題,Java程式不會記憶體洩漏
14、關於程式和執行緒,下列說法正確的是___
A、執行緒是資源分配和擁有的單位
B、執行緒和程式都可併發執行
C、在linux系統中,執行緒是處理器排程的基本單位
D、執行緒的粒度小於程式,通常多執行緒比多程式併發性更高
E、不同的執行緒共享相同的棧空間
第三專案組 填空與題目
15、某遞迴演算法的演算法複雜度滿足如下關係:T(n)=0,(n<=1);T(n )=1+T(n/2)+n2,(n>=2),那麼該演算法複雜度表示為大0為:
16、某種物理機一年的無故障概率為p,每臺物理機經由過程虛擬技巧可以虛擬出v臺虛擬機器,假定在物理機沒呈現故障的景象下虛擬機器不會呈現故障,那麼每臺虛擬機器一年無故障的概率為___p___。若是有m臺如許的物理機,虛擬出mv臺虛擬機器,經由過程某種分散式容錯技巧,可以使基於這些虛擬機器搭建的辦事只要有一臺虛擬機器無故障,這個辦事便可以無故障。那麼這個辦事一年的無故障概率為__1-(1-p)m_。若是想經由過程同樣數量的虛擬機器實現更高的無故障概率,但不限制物理機的數量,可以採取的辦法是:通過增加物理機,然後降低每臺物理機虛擬出虛擬機器的數量
17、宿舍內5個同學一起玩對戰遊戲,每場比賽有一些人作為紅方,另一些人作為藍方,請問至少需要多少場比賽,才能使任意兩個人之間有一場紅方對藍方和一場藍方對紅方的比賽?請寫出思路及成果。
18、讀取並處理一個檔案中的記錄,每條記錄處理會產生一個對應的結果,不同記錄之間的處理過程之間互不依賴,結果輸出到另一個檔案中,某程式猿實現了該處理程式的單執行緒版本,執行時發現CPU應用率達到80%。
(1)為何CPU應用率不是100%?
(2)假定程式執行的機器的核數在4到16不等,如何設計程式,使該處理程式執行的最快?
(3)在一個n核機器上,速度最快是原來程式的多少倍?
19、請實現一個程式,能對點分字串按段翻轉。如"www.taobao.com”翻轉為“com.taobao.www”,”sports.sina.com.cn”翻轉為”cn.com.sina.sports”。請求時間複雜度為O(n),空間複雜度為O(1),結果儲存在引數指標所指的空間中。
解答:
#include <iostream> #include <cstring> void ReverseString(char *str, int len) { if(str == NULL || len <= 0) return ; char *p = str + len - 1; while(str < p) { char t = *str; *str = *p; *p = t; str++; p--; } } void ReverseWord(char *str) { if(str == NULL) return ; int len = strlen(str); ReverseString(str, len); char *p = str; while(*str != '\0') { while(*str >= 'a' && *str <='z' && *str != '\0') str++; ReverseString(p, str - p); p = ++str; } } int main(void) { char str[] = "www.taobao.com"; ReverseWord(str); std::cout<<str<<std::endl; return 0; }
第四專案組 綜合題
某B2C網站有1億使用者和200萬商品,每一個使用者都有自己喜愛若干件商品,若是兩個使用者都喜好同一件商品,我們定義中兩個使用者有一個“同好商品”,“同好度”為兩個使用者的同好商品數和這兩個使用者中至少有一人喜好的商品數的比值。同好度衡量了兩個使用者之間的商品喜好的接近程度,這在商品推薦,SNS等領域有著重要用途。
請設計一個演算法,計算每一個使用者的同好使用者集合及同好度。
輸入資料:多個檔案,每個檔案的資料有多行,每一行的資料格式如下:使用者ID喜好的商品ID1 喜好的商品ID2 .......喜好的商品n,此頂使用者ID和商品ID均為32位整數,中心以空格分隔。
如:
16 1001 1002 3003
輸出資料:一個或多個檔案,每一行的資料格局如下:
使用者ID 同好使用者ID1:同好度 同好使用者ID2:同好度......同好使用者IDn:同好度
中心以空格隔開。演算法可以描述為虛擬碼。