2016届 阿里巴巴校招研发project师C/C++笔试题--2015.08.23

选择题牛客网地址题目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设计格式转换的工具类。注意设计的通用性,比方:可能有新的角色增加。要求给做加密解密等。

题目三:

待更新……

时间: 2024-10-13 12:11:08

2016届 阿里巴巴校招研发project师C/C++笔试题--2015.08.23的相关文章

最美应用-从Android研发project师的角度之[最美时光]

最美应用-从Android研发project师的角度之最美时光 @author ASCE1885的 Github 简书 微博 CSDN 近期发现最美应用这样一个站点.它会定期推介一些非常有意思的app,作为开发人员,每次看到非常棒的app都会从实现角度进行剖析.想着假设是自己将怎样实现呢?因此,就有了这个系列的文章,旨在从技术选型和架构的角度解读一些有意思的app. 最美时光是最美应用团队出品的一个纪念日app,用于记录和分享那些重要的日子,我们就先从这个開始吧! 使用的开源函数库 1. 开源日

百度2016研发project师笔试题(四)

2015/12/8 10:42(网上收集整理的,參考答案在后面.若有错误请大神指出) 1. 关于MapReduce的描写叙述错误的是() A. 一个Task一般会把输入集切分成若干独立的数据块 B. 通常计算节点和存储节点是同一节点 C. 通常,作业的输入输出都会被存储在文件系统中 D. MapReduce框架会先排序map任务的输出 2. 设哈希表长度为11,哈希函数H(K)=(K的第一个字母在字母表中的序号)MOD11,若输入顺序为(D,BA,TN,M,CI,I,K,X,TA),採用内散列表

网易 2016 实习研发project师 3道 编程题

1 比較重量 给定两颗钻石的编号g1,g2,编号从1開始.同一时候给定关系数组vector,当中元素为一些二元组.第一个元素为一次比較中较重的钻石的编号,第二个元素为较轻的钻石的编号.最后给定之前的比較次数n. 请返回这两颗钻石的关系,若g1更重返回1,g2更重返回-1,无法推断返回0. 输入数据保证合法,不会有矛盾情况出现. 測试例子: 2,3,[[1,2],[2,4],[1,3],[4,3]],4 返回: 1 class Cmp { public: int cmp(int g1, int g

2016届 360校招内推笔试题--2015.8.11

一.填空题40题,时间80分钟 和360实习的题目有一些是重复的.可以参考牛客网:http://www.nowcoder.com/. 二.两道编程题,时间70分钟,题目不是特别难,如下所示 第一道: 思路: 统计每个字符出现的次数.然后遍历一次,找到第一个出现次数为1的字符.在我的vs上调试可以通过,但是到360里面的编辑器就不行了,说是超时.从题目的hint里可以看出可能是从终端接收数据出问题.本想一个一个字符接收的,最后时间不够了.还没解决.下面贴出没有通过的代码. 代码: #include

2015年阿里巴巴校招研发工程师在线笔试题汇总

在线笔试题汇总 卷一: 1.下面的函数中哪个是系统调用而不是库函数______? printf scanf fgetc read print_s scan_s 2.某足球队有四名外援,分别来自巴西.荷兰.意大利和美国.他们分别擅长前锋.后卫或守门,其中: ① 美国外援单独擅长守门: ② 意大利外援不擅长前锋: ③ 巴西外援和另外某个外援擅长相同的位置: ④ 荷兰外援擅长的位置和巴西外援不同. 以上条件可以推出巴西外援擅长的位置是______. 前锋 守门 后卫 前锋或守门 后卫或守门 前锋或后卫

阿里巴巴笔试题集第23题及分析

题目: 一个骰子, 6 面, 1 个面是 1 , 2 个面是 2 , 3 个面是 3 , 问平均掷多少次能使 1 . 2 . 3 都至少出现一次. ?方法: 面对面试概率题几乎屡试不爽的分叉树递归列方程法. ?这是一个求数学期望的问题,最终是求 1 , 2 , 3 出现至少一次的最短长度的期望. ?这样分叉树的每个节点是一个期望状态,而每个分叉是一次投掷结果.将后续期望出现 1 . 2 . 3 各至少一次的情形记作 L 123 (即题目所求),将后续期望出现 1 . 2 各至少一次( 3 无关)

去哪儿笔试题2015 - 研发

1. 有序数列二分查找 最简单,最纯粹的二分查找问题,应该是用循环的方法去做的话会得分较高. 2. 寻找第一个出现两次的字符 举个例子:字符串"yactysa"中第一个出现了两次的字符串是'y' 解法1: O(n^2)的效率.也就是最简单的两重循环. 解法2: 更好也更多被采用的,hash方法.定义一个256的数组就可以了. 3. 多个字符串中,搜索"your"子串,并按出现次数排序 详述题目:给出一个文本输入,要求输出所有包含子串"your"的

蘑菇街笔试题2015校招(技术岗)

现有一串数据,找出最大递增序列.(例如:4 2 6 3 1 5,最大递增序列为2 3 5,输出3) A,B两个整数集合,设计一个算法求交集,尽可能高效. 一个大的含有50M和URL的文件记录,一个小的含有500个URL的文件记录,找出两个记录里相同的URL,要求最小空间和时间. 实现一个函数,对一个正整数n,算得到1需要多少次操作次数.操作规则:如果n为3的整数倍,将其除以3,如果不为3的整数倍,可以加2或者减1,一直处理下去.例如:func(7)=2,可以证明最少需要3次运算 n=7  n-1

笔试-4399【2020校招】Web后端开发工程师笔试题(我又行了?然后一份面试通知都没有,我是真的菜啊。。。。)

感悟:两小时,单项选择15,问答8,编程3,论述5(大学规划,为什么选这个岗位等等,也占分) 单选:计算机网络偏多,然后就是一些基本知识点了: 好喜欢考这东西啊,下面答案是6,因为末尾有个'\0',我做错了....如果c[10]的话就是10 归并排序最坏情况(多分析一点最坏情况,因为最好情况都考烂了.....): 问答: TCP的三次握手和四次挥手,为什么是三次而不是两次,为什么是四次而不是三次 SQL建表(create table `user`(id int not null, user va