您的位置:首页 > 其它

阿里巴巴2016校招笔试题(含答案、解析)

2016-03-06 19:45 811 查看
3、将1,2,3,……,99,100任意排列成一个圈,相邻两数的差的绝对值求和最多为( )

A:100

B:198

C:200

D:500

E:2500

F:5000

答案:F

4、如果下列的公式成立:84*148=B6A8。则采用的是( )进制表示的。

A:15

B:11

C:12

D:14

E:16

F:以上都不对

答案:C

解析:

1、常规做法:假定数值是x进制的,则写出等式:(8x+4)(x2+4x+8)=11x3+6x2+10x+8,化简得到(3x2+6x+2)(x-12)=0,则x的非负整数解为x=12。

2、“启发式”做法:在十进制体系下,左侧个位乘积4*8=32;右侧个位为8,差32-8=24,从而进制必然是24的约数。只有C选项12是24的约数。

5、在1,2,3,……1000中,有( )个数各位乘积为0。

A:100

B:101

C:172

D:181

E:190

F:191

答案:D 181

解析:题目本质是求含有数字0的数。分三种情况讨论:

1、一位数中,没有数字为0;

2、两位数中,只有整十的数含有数字0,共9个;

3、三位数中,分为只有1个0和两个0两种情况:

3.1 若只有个位为0,则十位和百位各有9种取法,共81种取法;

3.2 若只有十位为0,则个位和百位各有9种取法,共81种取法;

3.3 若个位和十位都为0,则百位有9种取法。

4、1000本身是1种有效取法。

综上,共0 (一位数)+ 9(两位数) + 81+81+9(三位数) + 1(四位数) = 9+171+1=181种。

6、有一个单向链表队列中有一个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

答案:C

解析:基本的指针操作。需要将p的后继赋值给r的后继,然后将p的后继指向r即可。

9、一个长度为99的循环链表,指针A和指针B都指向了链表中的同一个节点,A以步长为1向前移动,B以步长为3向前移动,一共需要同时移动多少步A和B才能再次指向同一个节点( )。

A:99

B:100

C:101

D:49

E:50

F:51

答案:A

解析:假定经过n步A、B再次相遇。则A经过的结点为n,B经过的结点为3n;此刻B必然比A多经过了整数倍的链表长度(圈的长度),假定经过了i倍的链表长度,则有3n-n=99i,即2n=99i;满足该等式的最小整数位i=2,n=99。即A经过了99个结点,B经过了297个结点,二者再次相遇。

10、考虑以下二分查找的代码:

[code]include<stdio.h>int bsearch(int array[], int n, int v)
{
int left, right, middle;
left = 0, right = n-1;
while(left <= right)
{
    middle = left + (right - left)/2;
    if (array[middle] > v)
        right = middle;
    else if (array[middle] < v)
        left = middle;
    else
        return middle;
}
return -1;
}


对于输入array为:{2, 6, 8, 10, 13, 25, 36, 45, 53, 76, 88, 100, 127},n = 13, v = 127时,运行bsearch函数,while循环调用的次数为( )

A:1

B:2

C:3

D:4

E:5

F:无法退出

答案:F

解析:

由于在执行if(array[middle] < v)成功后,将left赋值为middle,若此时left和right仅相差1,则middle仍然会等于left,从而导致折半查找代码无法退出。而查找127恰恰发生了这种死机的情况。事实上,上述代码如果正常运行,应该把left = middle换成left = middle + 1,形成如下的正确代码。(此外,right = middle其实也可以换成right = middle-1)。

[code]int bsearch(int array[], int n, int v){
int left, right, middle;
left = 0, right = n-1;
while(left <= right)
{
    middle = left + (right - left)/2;
    if (array[middle] > v)
        right = middle;
    else if (array[middle] < v)
        left = middle + 1;
    else
        return middle;
}
return -1;
}


11、袋子中分别一叠纸币,其中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

12、商品推荐场景中过于聚焦的商品推荐往往会损害用户的购物体验,在有些场景中,系统会通过一定程度的随机性给用户带来发现的惊喜感。假设在某推荐场景中,经计算A和B两个商品与当前访问用户的匹配度分别为0.8分和0.2分,系统将随机为A生成一个均匀分布于0到0.8的最终得分,为B生成一个均匀分布于0到0.2的最终得分,那么最终B的分数大于A的分数的概率为( )

A:1/16

B:1/8

C:3/16

D:3/8

E:1/4

F:1/3

答案:B

解析:A=B的直线上方区域,即为B>A的情况。S蓝色=0.02 S矩形=0.16,

从而,p=0.02/0.16=0.125

13、有关下述Java代码描述正确的选项是( )

[code]public class TestClass {
private static void testMethod() {
    System.out.println("testMethod");
}
public static void main(String[] args) {
    ((TestClass)null).testMethod();
}}


A:编译不通过

B:编译通过,运行异常,报NullPointerException

C:编译通过,运行异常,报lllegalArgumentException

D:编译通过,运行异常,报NoSuchMethodException

E:编译通过,运行异常,报Exception

F:运行正常,输出testMethod

答案:F

解析:testMethod()是静态方法,不属于任何对象,所以其调用与类是否实例化没有关系。((TestClass)null).testMethod()在调用时编译器检测到该方法为静态方法,相当于TestClass.testMethod(),于是便正常执行。

14、有一个类B继承子类,他们数据成员如下:

[code]class A{
...
private:
  const int a;
};
class B : public A{
...
private:
  int a;
public:
  const int b;
  A c;
  static const char* d;
  A& e;
};


则这些成员变量一定要通过A或者B的构造函数初始化列表来初始化的是( )

A:b c

B: b c e

C: b c d e

D: c e

答案:B

解析:常量必须在初始化列表中初始化,否则,由于常量无法修改,在其他任何地方做为左值出现都将报错;A::a、B::b即为此类型;其中,A::a在类B中由B::a覆盖,但B::c必须经过类A的初始化列表才能初始化。引用类型必须初始化,因此也只能在初始化列表中初始化;A& e即为此类型。

15、A、B、C、D四人应聘一个程序员职位,此职务的要求条件是:Java熟练;懂数据库开发;会web开发;有C++经验。谁满足的条件最多,谁就被雇用。

把上面四个要求条件两两组合,每个组合都恰有一人满足。同时已知

A和B Java熟练

B和C会web

C和D懂数据库

D有C++经验

那么,被雇用的是( )

A:A

B: B

C: C

D: D

E:四人机会均等

F:以上均错

答案:B

16、从1,2,3,……,99,2015里任意选择一部分数(可能为0个数),这部分数按位异或起来的期望值是( )

A:512

B:1007

C:1008

D:2015/2

E:1024

F:2047/2

答案:F

17、以下函数中,和其他函数不属于一类的是( )

A:strcpy

B:strcpy

C:snprintf

D:strcat

E:strtok

F:strncat

答案:C

解析:

char strcpy(char dest, const char *src)是把src指向的字符串复制到以dest指向的地址空间中;int snprintf(char *str, size_t size, const char *format, …)是按照format格式化成字符串,然后将其复制到str中;char *strcat(char *dest,char *src)是把src所指字符串添加到dest结尾处;char *strtok(char s[], const char *delim)是将字符串s按照delim制定的分隔符分解为一组字符串。char *strncat(char *dest,char *src,int n)把src所指字符串的前n个字符添加到dest结尾处。

文章来自于 http://ask.julyedu.com/question/6951
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: