现在的位置: 首页 > 综合 > 正文

搜狗2012笔试、面试体会

2012年11月04日 ⁄ 综合 ⁄ 共 1019字 ⁄ 字号 评论关闭

一、C/C++(10道)
1、求输出
   int a[]={1,2,3,4,5}
   int*ptr = (int*)(&a+1)

   printf("%d %d", *(a+1), *(ptr-1));

答:a与&a的地址是一个,&a的类型是int[5],所以打印结果为2、5

2、
class A{
   virtual foo("A");
}
class B:A{
   foo("B")
}
void func(A a){
   a.foo();
}
void func1(A* ptr)
{
   a->foo();
}
void func2(A &a)
{
   a.foo()

}

答:第一个调用A中foo,第二个根据ptr指向的类型来选择,第三个根据a所引用的类型来选择。 A、B、B。

int main()
{
    B b;
    func(b),func1(&b),func2(b);
}
3、
union u{
    struct{
        int a;
        short b;
        char c;
    } s;
    char d;

};

求sizeof(u)

答:8

4、

class A{

       virtual void print(int a=3)

      {

               printf("A=%d\n", a);

      }

};

class B:public A

{

         virtual void print(int b=5)

        {

                 printf("B=%d\n",b);

        }

};

int main()

{

     A*ptr = new B();

     ptr->print();

     return 0;

}

求输出结果。

答:输出B=3。函数动态绑定,参数默认绑定。

二、数据结构(10道)
1、顶点度与边关系
2、2叉树前序中序求后序
3、双向链表插入新节点
4、AVL、B+、Hash常见应用
5、各种排序比较次数
三、大题
1、p()是一个概率生成器,有p的概率生成0,1-p的概率生成1,问如何实现g()生成均匀的0、1分布
2、给一个数组A[], 求输出Output[], Output[i]为所有A[]中元素乘积除了A[i],比如:A[10], 那么Output[3]=A[0]*A[1]*A[2]*A[4]*...A[9]

要求不许用除法,在O(n)时间中算出Output[]

3、棋盘覆盖问题(经典)

4、O(n)求数组中的众数

5、rand7()实现rand10()

总结:前面的几个语言题难度还是蛮大的,如果不使用很难理解。棋盘覆盖问题非常巧妙。

6、LCS最长公共子串

抱歉!评论已关闭.