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

匿名网友 匿名网友 发布于: 2016-06-14 00:00:00
阅读 215 收藏 0 点赞 0 评论 0

一  单项选择题(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为新建铁路的单位成本(单位成本乘以城市间的距离即为实际成本)。

 

 

 

     返回值:

 

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

评论列表
文章目录