1. 程式人生 > >2016屆 阿裏巴巴校招研發project師C/C++筆試題--2015.08.23

2016屆 阿裏巴巴校招研發project師C/C++筆試題--2015.08.23

int 常見 align 關於 輸出結果 strncat pair rto 存儲管理

選擇題牛客網地址題目1:http://www.nowcoder.com/test/255234/summary。

題目2:http://www.nowcoder.com/test/262758/summary。

題目3:http://www.nowcoder.com/test/280885/summary。

題目4:http://www.nowcoder.com/test/315791/summary。

部分選擇題例如以下:

1、假設下列的公式成立:78+78=123。則採用的是_______進制表示的。

A. 11

B. 12

C. 13

D. 14

E. 15

F. 以上都不正確

解答1:列方程:78+78=123 =》7x+8 + 7x+8=x^2+2x+3 =》 x=13

解答2:直接看個位:8+8=16,16-x=3 =》 x=13

2.、下列 java 程序輸出結果為______。

int i=0;

Integer j = new Integer(0);

System.out.println(i==j);

System.out.println(j.equals(i));

A. true,false

B. true,true

C. false,true

D. false,false

E. 對於不同的環境結果不同

F. 程序無法運行

解答:int類型與Integer進行比較,Integer會自己主動拆箱成Int類型再比較,所以為true。

3、下列java程序的輸出結果為____。

public class Example{

String str=new String("hello");

char[]ch={‘a‘,‘b‘};

public static void main(String args[]){

Example ex=new Example();

ex.change(ex.str,ex.ch);

System.out.print(ex.str+" and ");

Sytem.out.print(ex.ch);

}

public void change(String str,char ch[]){

str="test ok";

ch[0]=‘c‘;

}

}

A. hello and ab

B. hello and cb

C. hello and a

D. test ok and ab

E. test ok and cb

F. test ok and c

解答:change第一個函數傳遞的不是string的引用,所以不會改變值,第二個參數會退化為指針。所以改變傳入參數的值,第一個string不變為hello,第二個改變第一個字符。為cb。所以答案為B

4、有關下述Java代碼描寫敘述正確的選項是____。

public class TestClass {

private static void testMethod(){

System.out.println("testMethod");

}

public static void main(String[] args) {

((TestClass)null).testMethod();

}

}

A. 編譯不通過

B. 編譯通過。執行異常。報NullPointerException

C. 編譯通過,執行異常。報IllegalArgumentException

D. 編譯通過,執行異常,報NoSuchMethodException

E. 編譯通過。執行異常。報Exception

F. 執行正常,輸出testMethod

解答:testMethod方法用static修飾的,是存在方法區中的。所以能夠調用,假設把static去掉,就會報空指針異常

5、袋子中分別一疊紙幣。當中5元面值的紙幣6張。10元面值的紙幣5張,20元面值的紙幣4張,從袋子中隨意取4張紙幣,則每種面值至少取到一張的概率為____。

A. 8/91

B. 25/91

C. 48/91

D. 53/91

E. 60/91

F. 63/91

解答:C(6,2)*C(5,1)*C(4,1)+C(6,1)*C(5,2)*C(4,1)+C(6,1)*C(5,1)*C(4,2)/(C(15,4)=48/91

6、有一個扔骰子得返現的遊戲:你扔一個骰子。扔到多少就能夠得到和點數同樣的返現。比如你扔到3,能夠得到3元返現;扔到1,能夠得到1元返現。當你扔完第一次骰子,看到點數後,你須要做出例如以下選擇:

1、拿這個點數相應的返現。放棄扔第二次骰子;

2、再扔一次骰子,但此時你僅僅能拿第二次扔的點數相應的返現。

那麽,玩一輪這個遊戲的期望收益是____元。

A. 3.5

B. 3.75

C. 4

D. 4.25

E. 4.5

F. 4.75

解答:假設第一次扔的是1,那應該又一次扔,由於又一次扔大於1的概率為5/6>1/2。同理假設是2,3都應該又一次扔。假設第一次扔的是4。則不再扔,由於又一次扔大於4的概率為2/6<1/2。同理假設是5,6都不再又一次扔。

因此能夠得到概率分布例如以下:

X=1

X=2

X=3

X=4

X=5

X=6

P1=1/2*1/6

P2=1/2*1/6

P3=1/2*1/6

P4=1/6+1/2*1/6

P5=1/6+1/2*1/6

P6=1/6+1/2*1/6

解釋一下p1=1/2*1/6。

1/2表示第一次扔到1,2,3的概率。1/6表示第二次扔到1的概率,x=2,3同理

p4=1/6+1/2*1/6

1/6表示第一次扔到4的概率。1/2*1/6表示第一次扔到1,2,3第二次扔到4的概率,x=5,6同理

因此期望為1*p1+2*p2+3*p3+4*p4+5*p5+6*p6 = 4.25

7、一個長度為100的循環鏈表,指針A和指針B都指向了鏈表中的同一個節點,A以步長為1向前移動,B以步長為3向前移動。一共須要同一時候移動多少步A和B才幹再次指向同一個節點____。

A. 99

B. 100

C. 101

D. 49

E. 50

F. 51

解答:A B一快一慢,當二者差一圈時,剛好指向同一節點,3*x - x=100 =》 x=50

8、某操作系統採用分頁存儲管理方式。下圖給出了進程A的頁表結構。假設物理頁的大小為512字節,那麽進程A邏輯地址為0x0457(十六進制)的變量存放在____號物理內存頁中。

進程A頁表:

邏輯頁 物理頁

0 9

1 2

2 4

3 6

4 5

5 8

A. 9

B. 2

C. 4

D. 6

E. 8

F. 5

解答:16位邏輯地址。如果前n位為邏輯頁號,後16-n位為偏移地址。

每一頁大小為512,512=2^9,說明0x0457的9位是頁內偏移地址。前7為為頁號。前7位為0000 010,也就是頁號為2,因此相應物理頁是4。

9、在一個100人的團隊活動中,主持人小猿亮出了一幅裙子的照片。大喊:”看出藍黑色的舉手!

“,團隊中有45人舉手,然後小猿又喊:”看出白金色的舉手!“,團隊中有40人舉手。靈巧的小猿發現,有人從未舉過手,有人舉手了兩次,兩輪舉手分出的四類人的數目恰好構成一個等差數列。請問有____人既能看出藍黑色又能看出白金色。

A. 0

B. 15

C. 30

D. 35

E. 50

F. 55

解答:x 僅藍黑色 。y 藍黑色和白色, z 僅白色。 k 均沒看到。能夠得到

x+y = 40

y+z =45

x+y+z+k =100

(x+y+z+k) – (x+y)-(y+z) = k-y=15=nd, 當中 d 表示等差數列的前後項的差,因為等差數列僅僅有 4 向,因此 n<=3,15=3*5 ,因此 n=3 , d=5 。而且等差數列必定為 k45 40 y ,因此 y=35。

註:繪圖更easy理解。

10、將1,2,3,......,99,100隨意排列成一個圈,相鄰兩數的差的絕對值求和最多為____。

A. 100

B. 198

C. 200

D. 500

E. 2500

F. 5000

解答:最大排列為100 1 99 2 98 3.....51 49 50 所以和為99+98+97+..+1+(100-50)由於是一個圈所以,100和50相接。所以等於5000。

11、已知二叉樹中有45個葉節點,有25個度為1的節點,則二叉樹的總結點數為____。

A. 112

B. 113

C. 114

D. 115

E. 116

F. 117

解答:二叉樹中n0=n2+1,所以n2=44,所以n=n0+n1+n2=44+45+25=114

12、下面函數中,和其它函數不屬於一類的是____。

A. strcpy

B. memcpy

C. snprintf

D. strcat

E. strtok

F. strncat

此題存在疑問???

13、 某單鏈表有5個元素,設單鏈表的節點結構為(data,next),5個元素的data依次為(1、2、3、4、5)。已知指針q指向節點3。指針p指向節點4,那麽以下操作能將鏈表變為data依次為(1、2、3、5)的是____。(當中temp為節點類型指針,默認指向NULL)

A. q=p->next;

B. p=q->next;

C. p->next=q->next;

D. q->next=p->next; deleteq;

E. p->data=p->next->data;p->next=p->next->next; delete p->next;

F. temp =p->next; p->next=temp->next; p->data=temp->data; deletetemp;temp=NULL;

14、在1,2,3,.....1000中。有____個數各位乘積為0。

A. 100

B. 101

C. 172

D. 181

E. 190

F. 191

解答:考慮個位為0的數。形如10,20,30...110,120...200。210,220...1000等,共1000/10=100個數。再考慮十位為0的數。101到109,共同擁有9個,101到909共81個數(九個區間,每一個區間九個數,即9 * 9 = 81);共100 + 81 = 181。

15、 A、B、C、D四人應聘一個程序猿職位,此職務的要求條件是:Java熟練;懂數據庫開發。會Web開發;有C++經驗。誰滿足的條件最多,誰就被雇用。(1)把上面四個要求條件兩兩組合,每一個組合都恰有一人滿足。同一時候已知(2)A和Bjava熟練(3)B和C會Web(4)C和D懂數據庫(5)D有C++經驗那麽,被雇用的是____。

A. A

B. B

C. C

D. D

E. 四人機會均等

F. 以上均錯

解答:

A: java sql

B:java web C++

C:web sql

D:sql C++

16、有一個單向鏈表隊列中有一個A、B兩個相鄰元素,有一個指針p指向元素A,現將一個指針r指向的S元素要插入到A和B之間。該進行操作____。

A. p->next=p->next->next

B. r->next=p;p->next=r->next

C. r->next=p->next;p->next=r

D. r=p->next;p->next=r->next

E. r->next=p;p->next=r

F. p=p->next->next

17、使用KMP算法在文本串S中找模式串P是一種常見的方法。如果S=P={xyxyyxxyx},亦即將S對自己進行匹配,匹配過程中正確的next數組是____。

A. 0,1,1,2,2,1,2,2,3

B. 0,1,2,2,3,1,2,2,3

C. 0,1,1,2,3,1,2,2,3

D. 0,1,1,2,3,1,1,2,3

E. 0,1,2,2,3,1,1,2,3

F. 0,1,2,2,2,1,1,2,3

解釋:求出 next 數組 -1 0 0 1 2 0 1 1 2 KMP 應用 next 數組時。當第 j 個元素不匹配時。模式串右移 j-next[j] 個字符(由j移到next[j]位)

當求出的 next 數組為 0 1 1 2 3 1 2 2 3 時, KMP 應用 next 數組時,當第 j 個元素不匹配時。模式串右移 j-1-next[j] 個字符。關於KMP算法能夠參考:http://blog.csdn.net/u012243115/article/details/41868933。

18、A為整數數組, N為A的數組長度,請問運行下面代碼,最壞情況下的時間復雜度為____。

void fun(int A[], int n) {

for (int i = n - 1; i >= 1; i--) {

for (int j = 0; j < i; j++) {

if (A[j] > A[j+1]) {

int tmp = A[j + 1];

A[j + 1] = A[j];

A[j] = tmp;

}

}

}

}

A. O(N)

B. O(N^2)

C. O(Nlog(N))

D. O(log(N))

E. O(N^3)

F. 無法確定

19、牛客某程序員小楊每天接老婆下班回家。小楊在6點準時下班從公司開車出發,因為路上可能存在的堵車情況,小楊到老婆公司門口的時間點均勻的分布在6點20到6點30之間。老婆依據小楊的下班時間做了預計,到公司門口的時間點均勻的分布在6點25到6點30之間,假設小楊比老婆晚到公司門口將會挨罵,那麽小楊被罵的概率是____。

A. 1/4

B. 1/3

C. 1/2

D. 2/3

E. 3/4

F. 以上都不正確

解答:小楊時間為x坐標,20~30。老婆時間為y坐標,25~30。

四根線圍成一個矩形,矩形面積為50。

再畫根輔助線y=x。僅僅有y<x時才會挨罵,即小楊比他老婆晚。y=x與矩形相交於(25,25)(30。30),y=x下方三角形區域表示會挨罵,面積是25/2,所以挨罵概率為1/4。

20、將整數數組(7-6-3-5-4-1-2)依照堆排序的方式原地進行升序排列,請問在整個排序過程中。元素3的數組下標發生過____次改變。

A. 0

B. 1

C. 2

D. 3

E. 4

F. 5

解答:

使用大根堆排序。僅僅須要2次移動3的下標。第一次在將3升到堆頂的時候,第二次則是將3與末尾元素交換的時候,


做阿裏的題目最大的感觸就是時間根本不夠,40分鐘20個選擇題。差點兒每題至少須要2分鐘思考和計算。

附加題總共三道。例如以下:

題目一:

給出一組整數對 {(a[0], b[0]), (a[1], b[1]) ... (a[n-1], b[n-1]) }。全部 a 值 和 b 值分別不反復(隨意 i!= j 滿足 a[i] != a[j] 且 b[i] != 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) 想辦法確定樹根。

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

技術分享

思路:

要求的樹是笛卡爾樹,參考百度百科:http://baike.baidu.com/link?url=FpWeU_PlLS3F5hlkk0zGHun18lUzqbx6Q56sx3ZMrqKXaz-BBKd7IFo5AUKLFR8OJpz28IhsoOUlCTzw8SKj5K。


題目二:

如果眼下有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設計格式轉換的工具類。註意設計的通用性,比方:可能有新的角色增加。要求給做加密解密等。


題目三:

待更新……

2016屆 阿裏巴巴校招研發project師C/C++筆試題--2015.08.23