首页 > 就业 > 笔试

阿里巴巴校招笔试题

阿里巴巴校招笔试题



阿里巴巴2016校招笔试题

  ①、C++

  以下程序输出结果是( )

  class A

  {

  public:

  virtual void func(int val = 1)

  {

  std::cout << "A->" << val << std::endl;

  }

  virtual void test()

  {

  func();

  }

  };

  class B:public A

  {

  public:

  void func(int val = 0)

  {

  std::cout << "B->" << val << std::endl;

  }

  };

  int main(int argc,char* argv[])

  {

  B*p = new B;

  p->test();

  return 0;

  }

  A:A->0

  B:B->1

  C:A->1

  D:B->0

  答案:B

  解析:由于p指向了继承类B的对象,所以,在调用A中的test之后,虚函数func()会调用继承类B的函数,而默认形参仍然会使用test所在的类A的形参1,从而输出B->1。

  ②、数学计算将1,2,3,......,99,100任意排列成一个圈,相邻两数的差的绝对值求和最多为( )

  A:100

  B:198

  C:200

  D:500

  E:2500

  F:5000

  答案:F

  解析:定义1-50为“小数”,51-100为“大数”,将“相邻元素的差的绝对值之和”简称“绝差之和”。为了将绝差之和取最大,应该避免将“大数”和“大数”放在一起。因此,可以考虑间隔排布。形成:1,100,2,99,3,98,4,97……,50,51的.序列。而事实上,这个序列即绝差之和最大的序列。可使用如下证明:

  1、 如下图所示:如果将小数和小数交换,得到的序列绝差之和不变。将小数x和y互换。假定交换之前,x和y的相邻元素分别为a、b和c、d。则交换之前的绝差为:(a-x)+(b-x)+(c-y)+(d-y),交换之后的绝差为:(a-y)+(b-y)+(c-x)+(d-x),二者相等。

  2、 如下图所示:如果将大数和大数交换,得到的序列绝差之和不变。将大数a和b互换。假定交换之前,a和b的相邻元素分别为x、y和z、w。则交换之前的绝差为:(a-x)+(a-y)+(b-z)+(b-w),交换之后的绝差为:(b-x)+(b-y)+(a-z)+(a-w),二者相等。

  3、 如下图所示:如果将大数和小数交换,得到的序列绝差之和必然减小。将小数a和大数z互换。假定交换之前,a和z的相邻元素分别为x、y和b、c。则交换之前的绝差为:(a-x)+(a-y)+(b-z)+(c-z),交换之后的绝差为:|x-z|+|y-z|+|b-a|+|c-a|,由于x、y、z更接近,a、b、c更接近,所以交换后绝差变小。

  因此,无论如何交换,绝差之和都无法增大。即原序列的绝差之和是最大的。它形成的绝差序列是99,98,97,96……,2,1,50,这100个数的和为5000。

  ③、计算机基础

  如果下列的公式成立: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的约数。

相关内容

热门阅读
随机推荐