2014年3月29阿里巴巴实习生笔试题目

2014年3月29阿里巴巴实习生笔试题目_第1张图片

1、C

解析:192.168.1.121 & 255.255.255.248 = 192.168.1.120

2、D

解析:2*3*8=48

3、C

4、D

5、D

解析:

二维数组只能省略第一维的大小

一维数组的大小可以省略。可是二维数组的元素个数是行数和列数的乘积,如果我们只告诉电脑元素个数,电脑无法知道究竟这个数组是几行几列。所以,C++规定,在声明和初始化一个二维数组时,只有第一维(行数)可以省略。比如:
    int array[][3]={1,2,3,4,5,6};
相当于:
    int array[2][3]={1,2,3,4,5,6};

6、B


7、A

解析:删除和插入分别是n-i,n-i+1

8、B

9、B

解析:a、b、c均为真

10、C

解析:13  费波那契数列  f(n)= f(n-1)+ f(n-2)(n>=3), f(1)=1, f(2)=2

1 2  3  5  8  13

11、D

解析:试试吧

12、B

解析:20*3+10*2+1*1+1=82

13、D

14、C,

解析:注意题目是查找

15、A

16、B

17、A

(2^3)^33 * 2

18、B  不会,猜的

19、B

总共进行3轮,第一轮消去12,只能34;第二轮消去34,只能56;第三轮56胜者最大为6

20、C  

解析:计算期望值

0      1            2                  3             4               ……n

0.5  o.5^2  o.5^3         0.5^4          o.5^5        ……0.5^n


结果1


21、BCD

(1) 无法通过malloc(size_t)函数调用申请超过机器物理内存大小的内存块。

首先,通过查找资料[1,2],得出结论:malloc() 分配的是虚拟内存,访问具体虚拟地址的时候,实际上会做虚拟内存和物理内存的映射,最终调用物理地址的内容。

所以我觉得可以通过malloc(size_t)申请超过机器物理内存大小的内存块,因为机器存在虚拟内存。(1) 错误。 【我不是太确定】

(2) 无法通过内存释放函数free(void*)直接将某块已经使用完的物理内存直接还给操作系统。

资料[3] 中提到:

    其中brk区(确切名字我不知道)可以用系统调用brk动态增长或缩小,malloc/free动态分配的内存就在brk区,内存分配算法由C库函数实现,与操作系统无关。需要更多内存时,调用sbrk/brk增长brk区,malloc一般不对应一次brk,一次brk分配比较大的块,malloc在这里再分,free一般只是更新空闲块,不调用任何系统调用,就是说free释放的内存可能不归还给系统,直到进程退出时才释放。

free释放的内存不一定直接还给操作系统,可能要到进程结束才释放。但(2) 说free不能把它归还给操作系统,就不对了。所以,我认为(2)是错误的。

(3) 可以通过内存分配函数malloc(size_t)直接申请物理内存

通过前面两题的,可以直到malloc不能直接申请物理内存,它申请的是虚拟内存。所以我认为(3)是错误的。

23、ADE

解析:可以用二项式来解答(10+n)^14的区间是否为16位数字,计算较复杂

貌似是12,13符合要求吧

24、C


26、两两归并排序。

第一次,N/2 组,每组时间复杂度O(2M),综合为 O(N/2 * 2M) = O(NM)

第二次,N/4 组,每组时间复杂度O(4M),综合为 O(N/4 * 4M) = O(NM)

依次类推,共有logN (底为2)次。

故总的时间复杂度为:O(MNlogN)

27、ab>

<a

cd>

<b

ab>

上述过程a和b可以互换

2+1+10+2+2=17



http://blog.csdn.net/cyangc/article/details/22521739转载地址

你可能感兴趣的:(2014年3月29阿里巴巴实习生笔试题目)