2013年人人校园招聘笔试题

一、选择题(每题5分,共计50分)
1、对于全局函数 int f(void) ,与其完全等价的函数原型为()
A、int &f();      B、int f(void) const;       C、const int f();      D、A、B、C都不是
2、下列关于构造函数的描述中,错误的是()
A、构造函数可以设置默认的参数
B、构造函数在定义类对象时自动执行
C、构造函数可以是内联函数
D、构造函数不可以重载
函数重载是通过靠参数来实现的,构造函数是可以重载的,但析构函数没有参数,不能重载,所以析构函数只有一个版本。
3、考虑函数原型 void test(int a , int b = 7, char ch='*'),下面的函数调用中,属于不合法调用的是()
A、test(5)      B、test(5,8)     C、test(6,'#')      D、test(0,0,'#')
4、所谓LRU页面淘汰算法是指将驻留在内存中()页面淘汰
A、时间最长的
B、最久未使用的
C、使用频度最少的
D、出现脏数据的
5、下列说法错误的是()
A、构造函数可以有一个参数         B、构造函数可以有多个参数
C、一个类只能有一个构造函数       D、一个类只能有一个析构函数
6、系统在调用重载函数时,能作为确定哪个重载函数被调用的依据是()
A、函数返回类型     B、参数个数    C、函数名称    D、参数名称
7、一个栈的入栈序列是A、B、C、D、E,则栈的不可能的输出序列是()
A、EDCBA       B、DECBA     C、DCEAB     D、ABCDE
8、有12个球,外形相同,其中一个小球的质量与其他11个不同,给一个天平,需要几次把这个小球找出来并且求出这个小球是比其他的轻还是重()
A、3     B、5      C、7      D、9



9、



二、问答题
1、编码实现环状单向链表(尾指针直接指向头指针,中间没有空节点),去除连续的重复元素的操作。
比如:1(头)->2->2->3->3->1->1(头) 去除以后的结果是1->2->3,注意头尾的1也要去掉一个。
struct Tnode
{
Tnode *next;
int value;
};


Tnode *unique(Tnode *head)
{
}



2、静安市区建有一条从南到北的公路,沿着这条公路有10个加油站,加油站总部每天都要给每个加油站补给一车汽油,加油站总公司计划在这10个加油站中选出一个加油站作为总补给点,每天负责给其他加油站送一车汽油,请问挑选哪个加油站使得每天负责运送汽油的总里程数最小,请用代码实现,如果时间不够,请写出主要思路。


3、阅读下面一段程序:
[cpp] view plain copy
  1. int foo(int x , int y)  
  2. {  
  3.     if(x == 0 || y == 0)  
  4.         return 2;  
  5.     return foo(x - 1 , y ) + foo(x , y - 1);  
  6. }  
(1)当输入的x和y分别为8和8时,写出该程序的结果,并写出你的演算过程。   简单的递归应用
(2)该程序的执行效率很低,请写出你能想到的更高效f函数的实现方法。
由于递归的效率很低,所以我们可以使用递推函数来实现。
[cpp] view plain copy
  1. int foo(int x , int y)  
  2. {  
  3.     int i , j , res;  
  4.     int **c = new int*[x+1];      //共有x+1行    
  5.     for(i = 0; i < x + 1 ; ++i)    
  6.         c[i] = new int[y+1];      //共有y+1列  
  7.     //初始化  
  8.     for(i = 0; i < x + 1 ; ++i)  
  9.         c[i][0] = 2;  
  10.     for(i = 0; i < y + 1 ; ++i)  
  11.         c[0][i] = 2;  
  12.   
  13.     for(i = 1; i < x + 1 ; ++i)  
  14.     {  
  15.         for(j = 1; j < y + 1 ; ++j)  
  16.             c[i][j] = c[i-1][j] + c[i][j-1];  
  17.     }  
  18.     res = c[x][y];    
  19.     for(i = 0; i < x + 1 ; ++i)    //释放动态申请的二维数组    
  20.         delete[] c[i];  
  21.     delete[] c;  
  22.     return res;  
  23. }  

4、题目:由于诺基亚手机不止可以当作手机使用,还可以作为砖头防身,人人的员工小丁相测一测它从多高才能摔破。借助人人公司所在的静安中心大楼(共27层),小丁准备从1层开始一层一层的将诺基亚手机扔下去,直到摔破为止,显而易见,在最坏的情况下需要扔27次才能测出这个临界值(假定顶层的高度一定可以摔破这部诺基亚手机),小丁跟同事小李说了这个想法,小李说他这也有一部同型号的诺基亚手机,正好不用了给了小丁,现在小丁手中有两部诺基亚手机。
(1)请你帮忙计算一下在最坏情况下,小丁最少需要扔几次才能测出这个临界值,并且给出具体策略?(PS,两部手机,第一步手机选择第k层扔下去,若是没有摔坏我们可以继续拿来往楼下摔,若是摔坏了,只有一部手机了,还得按照之前一部手机的策略)
1+2+3+...+x>=27  可以求得x=7,则小丁最少需要扔7次才能测出这个临界值。
小丁依次分别站在7、13、18、22、25、27层进行测试,比如当在25层楼将诺基亚手机扔下去时,摔破了,则小丁从23层开始依次往楼上一层一层的测试,肯定在不超过7次的时候测出这个临界值。
(2)现在我们发散一下,假设给你m部诺基亚手机,n层的高楼(假定顶层的高度一定可以摔碎),在最坏情况下至少需要扔多少次才能测出临界高度?程序实现,最好给出算法思想,假定输入若干组m和n,你的程序需要对每组m、n给出响应结果。(其中m属于[1,50],n属于[1,1000])

转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/8453834

你可能感兴趣的:(2013年人人校园招聘笔试题)