2016届 阿里巴巴校招研发工程师C/C++笔试题--2015.08.23
来源:互联网 发布:威廉叶芝知乎 编辑:程序博客网 时间:2024/05/17 08:09
选择题牛客网地址题目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。
注:画图更容易理解。
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届 阿里巴巴校招研发工程师C/C++笔试题--2015.08.23
- 阿里巴巴 2014校招 研发工程师 笔试
- 2016阿里巴巴c/c++研发工程师在线笔试题(选择题)
- 2015届阿里巴巴校招研发在线笔试题
- 阿里巴巴2016研发工程师笔试题
- 阿里巴巴2016研发工程师笔试题
- 2015年阿里巴巴校招研发工程师在线笔试题汇总
- 2014阿里巴巴校招在线笔试题(数据研发工程师岗位)之二叉树
- 百度校招研发工程师笔试题
- 2016阿里巴巴c/c++研发工程师在线笔试题(附加题)(题目写的很乱,纯属碎片)
- 2015年阿里巴巴校招研发工程师编程题
- 德拓DATATOM校招C/C++软件研发笔试题
- 阿里巴巴2015校招研发在线笔试题
- 阿里巴巴2016研发工程师笔试题(四)
- 阿里巴巴2014 3.29 研发工程师笔试题
- 2015年阿里巴巴研发工程师笔试题
- 2014 阿里巴巴 校招 测试开发工程师 笔试题
- 阿里巴巴2016校招在线笔试附加题(C++研发)
- 冒泡函数
- java1.8环境配置(win8)
- 数据结构之栈的链表实现
- 利用BufferedInputStream bufferedOutputStream读写文件
- greenDAO系列3--又是介绍
- 2016届 阿里巴巴校招研发工程师C/C++笔试题--2015.08.23
- PHP+memcached+Mysql(主从)
- U盘装win7/win8 32位&64位系统
- 2034 人见人爱A-B【二分+排序】
- Target_Action
- 文件操作(NSFileManager)
- 一些极其有用的Lua代码
- Linux学习笔记 - 版本选择与安装
- greenDAO系列4--构建模型