杭州长河通信技术有限公司笔试题

1. 分析一下这段程序的输出 (Autodesk)

class B

{

public:

B()

{

cout<<”default constructor”<}

~B()

{

cout<<”destructed”<}

B(int i):data(i)//B(int) works as a converter ( int -> instance ofB)

{

cout<<”constructed by parameter ” << data <}

private:

int data;

};

B Play( B b)

{

return b ;

}

(1)results:

int main(int argc, char* argv[])constructed by parameter 5

{destructedB(5)形参析构

B t1 = Play(5); B t2 = Play(t1);destructed t1形参析构

return 0;destructedt2 注意顺序!

}destructedt1

(2)results:

int main(int argc, char* argv[])constructed by parameter 5

{destructedB(5)形参析构

B t1 = Play(5); B t2 = Play(10);constructed by parameter 10

return 0;destructedB(10)形参析构

}destructedt2 注意顺序!

destructedt1

2. 写一个函数找出一个整数数组中,第二大的数(microsoft)

答案:

const int MINNUMBER = -32767 ;

int find_sec_max( int data[] , int count)

{

int maxnumber = data[0] ;

int sec_max = MINNUMBER ;

for ( int i = 1 ; i < count ; i++)

{

if ( data[i] > maxnumber )

{

sec_max = maxnumber ;

maxnumber = data[i] ;

}

else

{

if ( data[i] > sec_max )

sec_max = data[i] ;

}

}

return sec_max ;

}

3. 写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数。

KMP算法效率最好,时间复杂度是O(n+m),详见:https://www.zhanglihai.com/blog/c_335_kmp.html

4. 多重继承的内存分配问题:

比如有class A : public class B, public class C {}

那么A的内存结构大致是怎么样的?

5. 如何判断一个单链表是有环的?(注意不能用标志位,最多只能用两个额外指针)

struct node { char val; node* next;}

bool check(const node* head) {} //return false : 无环;true: 有环

一种O(n)的办法就是(搞两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然):

bool check(const node* head)

{

if(head==NULL)return false;

node *low=head, *fast=head->next;

while(fast!=NULL && fast->next!=NULL)

{

low=low->next;

fast=fast->next->next;

if(low==fast) return true;

}

return false;

}

相关文章推荐:

中金2013 招聘笔试真题

精选微软经典算法考题

广州羊城晚报经管类笔试真题

营销岗位招聘笔试真题  

本文已影响6827
上一篇:东信公司招聘笔试真题 下一篇:58同城校园招聘技术类笔试题

相关文章推荐

|||||