金山软件2015校园招聘笔试题C/C++ A卷

  • 一  单项选择题(4*10分)


  • 1

    int a = 4,则对于表达式++(a++)的结果的说法正确的是()

    (A)结果为5

    (B)结果为6 

    (C)结果为7 

    (D)以上都不是


  • 2

     如下代码段,哪种描述是正确的()

        class A{/*…*/};
    
        void f(const A** p){/*…*/}
    
         void g(const A* const* p){/*…*/}
    
         void k(const A*& p){/*…*/}
    
        void main()
    
        {
    
              const A *ca = new A();
    
              A *a = new A();
    
              A** p = &a;
    
              k(ca); [1]
    
              f(p);    [2]
    
              g(p);   [3]
    
              //…
    
         }

    (A)全部正确

    (B)[2]错,[1] [3]正确

    (C)[1][2]错,[3]正确

    (D)[1]正确,[2][3]错


  • 3

    给出下述节点及权值(括号中数字为权值):a(7),b(5),c(4),d(2),构造Huffman树,其带权路径长度为( )

    (A)18   

    (B)35 

    (C)36 

    (D)46


  • 4

    有一场演出,共八位演员A,B,C,D,E,F,G,H参加,对其出场次序有如下要求:BH需在A之后出厂,E出场之后BF才能出场,D需要在CH之前、B之后出场,F需要在CD之前出场,G需要在CH之后出场,则下列说法正确的是()

         ①  无法唯一确定B第几个出场

         ②  无法唯一确定D第几个出场

         ③  演员的出场次序有且仅有4种方案可选

         ④  任意一种方案C都必然在第6位出场

         ⑤  演员的出场次序最多可以有6中方案可选

    (A)①③ 

    (B)②⑤  

    (C)①④⑤        

    (D)②③④


  • 5

    如下代码的输出结果是()

        int _tmain(int argc,_TCHAR* argv[])
    
         {
    
              int a[2][5] = {{2,3,4,5,6},{7,8,9,10,11}};
    
              int *ptr = (int*)(&a+1);
    
              cout << *(ptr-3)<<endl;
    
         }

        (A)3                    (B)4                    (C)9                    (D)10


  • 6

    如下代码的输出结果是()

        include<iostream>
    
        using namespace std;
    
        int WhoAmi(int num1,int num2)
    
        {
    
              if(num2 == 0)
    
                  return num1;
    
              int num = num1^num2;
    
              int carry = (num1&num2)<<1;
    
              return WhoAmi(num,carry);
    
         }
    
         int _tmain(int argc,_TCHAR* argv[])
    
        {
    
              cout<<WhoAmi(5,6)<<endl;
    
              return 0;
    
         }

        (A)1                    (B)11                    (C)-1                    (D)30


  • 7

    一动态链接库发表的导出类如下,以下哪种做法对该类的更新是没有问题的?(只列出改动部分)()

     

      class _decispec(dllexport)PubliClass
    
        {
    
              public:
    
             virtual void A();
    
             virtual void B();
    
              void C();
    
              friend void D();
    
              //…          
    
         };
    
        class PubliClass{/*…*/};

        (A)virtual  void B();

        (B)virtual void A();

        (C)void C() const;

        (D)void D()


  • 8

    有如下函数,则funb(10)为()

      

     int func(unsigned int v)
    
        {
    
              v ^= v>>16;
    
               v ^= v>>8;
    
               v ^= v<<4;
    
               v &= (0x6996>>v) & 1;
    
         }
    
        int funb(int n)
    
        {
    
              unsigned int t = 1<<n;
    
              int val = 0;
    
              for(int i = 0; i<t; ++i)
    
              {
    
                  val += func(i);
    
             }
    
              return val;
    
         }

         (A)255                    (B)511                    (C)512                    (D)1024


  • 9

     如下代码的输出结果是()

       

    #include<iostream>
    
        using namespace std;
    
        int function2(int a[], int b, int e)
    
        {
    
              if(e - b <= 1)
    
                  return abs(a[b] - a[e]) >= 3 ? a[b] : a[e];
    
    
              int l = 0, r = 0;
    
              l = function2(a, b, b+(e - b)/2);
    
              if (l%2 == 0)
    
                  r = function2(a, b+(e -b)/2 +1, e);
    
              else
    
                  return l;
    
              if(l | r)
    
                  return l|r;
    
              else
    
                  return r;
    
         }
    
        int main()
    
        {
    
              int a[] = {10, 5, 8, 4, 5, 20, 2,3};
    
              cout<<function2(a, 0, sizeof(a)/sizeof(1))<<endl;
    
    
              int b[] = {3, 5, 8, 4, 8, 30, 2, 3};
    
              cout<<function2(b, 0, sizeof(b) / sizeof(1))<<endl;
    
              return 0;
    
         }

        (A)15, 5                    (B)10, 5                    (C)20, 3                    (D)其它


  • 10

    如下代码的输出结果是()   

       

     #include<iostream>
    
        using namespace std;
    
         #include<iostream>
    
        using namespace std;
    
        void getNext(char *p, int *next, int &m)
    
        {
    
              int j = 0, k = -1;
    
              next[0] = -1;
    
              m = -1;
    
              while(j<strlen(p) - 1)
    
              {
    
                  if(k == -1 || p[j] == p[k])
    
                  {
    
                       j++;
    
                       k++;
    
                       next[j] = k;
    
                       if(m<k)
    
                            m = k;
    
              }
    
                  else
    
                  {
    
                       k = next[k];
    
                 }        
    
              }
    
         }
    
        int func(char *s, char *p, int &m)
    
        {
    
              int next[100];
    
              int count = 0, i = 0, j = 0;
    
              getNext(p, next, m);
    
              while(i<strlen(s))
    
              {
    
                       if(j == -1 || s[i] == p[j])
    
                       {
    
                            i++;
    
                            j++;
    
                       }
    
                       else 
    
                       {
    
                            j =next[j];
    
                       }
    
                       if(m == j)
    
                            count++;
    
                       if(j==strlen(p))
    
                            return count;
    
             }
    
              return -1;
    
         }
    
        int main()
    
        {
    
              char* str = "acabaabaabcaeabaabcacabaabcd";
    
              char* subStr = "abaabcac";
    
              int m = -1;
    
              cout<<func(str, subStr, m)<<endl;
    
              return 0;
    
         }

        (A)3                    (B)4                    (C)13                    (D)以上都不是


  • 二  程序设计题(20*3分)


  • 1

    给定一个字符串S, 求所有长度小于等于3的子串出现的次数,输出结果按出现次数从大到小排序,如果次数相同,按字典序排序,比如,给定字符串“abcdab”,输出结果为

        a     2

        ab     2

        b     2

        abc     1

        bc     1

        bcd     1

        c     1

        cd     1

        cda     1

        d     1

        da     1

        dab     1


    函数原型:

        std::vector<std::pair<std::string, int>> calculate3Gram(const std::string &S);


  • 2

     某地生态系统存在一个复杂的物种食物网,科学家们要做一个循环食物链分析,所谓“循环食物链”是指物种之间直接或间接互为食物关系,现在请:

        (1)设计一个数据结构,可以存储完整的食物网

        (2)根据在(1)中设计的数据结构,编写一段代码判断一个给定的食物网中是否存在循环食物链


  • 3

    有关部门正在规划建设高速铁路系统以连接全国各个城市。其中部分城市之间已经修建了铁路,建设高速铁路系统,既可以对原有线路进行翻新,也可以完全新建,而翻新成本远小于完全新建的成本。请编写一段代码计算建设高速铁路系统的最小成本。

        函数原型:

              double solve(const vector<pair<double, double>> & cities,

                                      const vector<pair<int, int>>&railways,

                                      double m, double n);

        输入:

                  vector<pair<double, double>>cities 为各个城市的位置(x,y坐标值)。

                  vector<pair<int, int>>railways表示已经修建铁路,其中pair<int, int>(a,b)表示城市a和b之间已经建有铁路,a和b为城市在cities中的index,即 0<= a,b<city.size()

        m为翻新铁路的单位成本,n为新建铁路的单位成本(单位成本乘以城市间的距离即为实际成本)。


         返回值:

                   建设高速铁路系统的最小成本


个人资料
bjchenli
等级:8
文章:260篇
访问:22.0w
排名: 3
推荐圈子
上一篇: 2015去哪儿网秋季校园招聘试题(产品类)
下一篇:2015年新浪研发工程师笔试题
猜你感兴趣的圈子:
IT校招圈
标签: 出场、int、function2、铁路、const、面试题
隐藏