2017中兴校园招聘成都地区笔试题

来源:互联网 发布:迅雷网络校园招聘 编辑:程序博客网 时间:2024/04/29 03:24





 


 


答案:


#include<iostream>


 


using namespacestd;


 


intcaculateGCD(int a, int b){


        int c;


        if(a== b)


                  return a;


        else{


                  while((c=a%b) != 0){


                           a=b;


                           b=c;


                  }


        }       


        return b;


}


 


int main()


{


        int a=6;


        int b =12;


        int c;


        c = caculateGCD(a, b);


        cout<<"a"<<a<<"\t"<<"b:"<<b<<"\n"<<"c:"<<c<<endl;


}


 


 


 


 


 



 


答案:


 


 


int gcd(int x,inty)


{


   int t;


   if(x<y)


   {


       t=x;


       x=y;


       y=t;


   }


   return (y==0)?x:gcd(y,x%y);


}


intgeneralizedGCD(int *arr, int len)


{


   if (len == 1)


       return *arr;


    return gcd(arr[len-1],generalizedGCD(arr,len-1));


}


 


 


 


 



 


 


答案:


 


 


 


 


#include<iostream>


 


using namespacestd;


 


voidtrapeziumPatternPrint(int n){


        int i,j;


        int k=1;


        int m;


        


        for(i=0;i<n;i++){


                  for(j=0;j<i;j++){


                           cout<<"--";


                  }


                  


                  for(j=1;j<=n-i;j++){


                           cout<<k++<<"*";


                           


                  }


                  


                  m = n-i-1;


                  m = n*(n+1)/2+m*(m+1)/2+1;


                  


                  for(j=1;j<n-i;j++){


                           cout<<m++<<"*";


                  }


                  cout<<m;


                  


                  


                  cout<<"\n";


        }


        cout<<endl;


}


 


 


int main()


{


 


   trapeziumPatternPrint(4);


   return 0;


}


 


 


 


 



1.如果树中的节点的值不重复的话可以用如下代码,非常简洁:


boolHasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)


{


if (NULL == pRoot1)


{


return false;


}


if (NULL == pRoot2)


{


return true;


}


if (pRoot1->val == pRoot2->val)


{


return HasSubtree(pRoot1->left,pRoot2->left)&&HasSubtree(pRoot1->right,pRoot2->right);


}


else


{


returnHasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2); 


}


}


2


#include<iostream>


using namespacestd;


struct TreeNode{


int val;


TreeNode *left;


TreeNode *right;


TreeNode(int value):val(value), left(NULL), right(NULL) { }


};


//Determine ifbinary tree root2 is a sub-structure of binary tree root1.


boolSubBinaryTree(TreeNode *root1, TreeNode *root2)


{


if(!root1 && !root2) return true;


if(root1 && root2)


{


if(root1->val == root2->val)


return SubBinaryTree(root1->left,root2->left) &&SubBinaryTree(root1->right, root2->right);


else


returnSubBinaryTree(root1->left, root2) ||SubBinaryTree(root1->right, root2);


}


return false;


}


 



1. #include<iostream>  

2. using namespace std;  

3.   

4. int *next_arr(int &day, int arr[]);  

5. int main()  

6. {  

7.     int k, day;  

8.     int arr[8];  

9.     cout << "请输入现在的状态: ";  

10.    for (int i = 0; i < 8; ++i)  

11.    {  

12.        cin >> k;  

13.        arr[i] = k;  

14.    }  

15.    cout << endl << "请输入查询的天数: ";  

16.    cin >> day;  

17.  

18.    int *arr_day=next_arr(day, arr);  

19.    cout << endl << 将来的活跃状态  ";  

20.    for (int i = 0; i < 8; ++i)  

21.    {  

22.        cout << arr_day[i] << " ";  

23.    }  

24.    cout << endl;  

25.    system("pause");  

26.}  

27.int *next_arr(int &day, int arr[])  

28.{  

29.    int temp[8];  

30.    int n = 0;  

31.    for (int j = 0; j < day; ++j)  

32.    {  

33.        for (int i = 0; i < 8; ++i)  

34.        {  

35.            switch (i)  

36.            {  

37.                case 0:  

38.                    temp[i] = arr[i + 1] ^ n;  

39.                    break;  

40.                case 1:case 2:case 3:case 4:case 5:case 6:  

41.                    temp[i] = arr[i - 1] ^ arr[i + 1];  

42.                    break;  

43.                case 7:  

44.                    temp[i] = arr[i - 1] ^ n;  

45.                    break;  

46.            }  

47.        }  

48.  

49.        for (int i = 0; i < 8; ++i)  

50.        {  

51.            arr[i] = temp[i];  

52.        }  

53.    }  

54.    int *arrresult = arr;  

55.    return arrresult;  

56.}  


 


第二种:


[cpp] view plain copy


1. #include<iostream>  

2. using namespace std;  

3.   

4. void next_arr(int day,int arr[]);  

5. int main()  

6. {  

7.     int k,day;  

8.     int arr[8];  

9.     cout << "请输入现在的状态: ";  

10.    for (int i = 0; i < 8; ++i)  

11.    {  

12.        cin >> k;  

13.        arr[i] = k;  

14.    }  

15.    cout << endl << "请输入查询的天数: ";  

16.    cin >> day;  

17.  

18.    next_arr(day, arr);  

19.    cout << endl;  

20.    system("pause");  

21.}  

22.void next_arr(int day,int arr[])  

23.{  

24.    int temp[8];  

25.    int n = 0;  

26.    for (int j = 0; j < day; ++j)  

27.    {  

28.        for (int i = 0; i < 8; ++i)  

29.        {  

30.            if (i == 0)  

31.            {  

32.                temp[i] = arr[i + 1] ^ n;  

33.            }  

34.            else if (i == 7)  

35.            {  

36.                temp[i] = arr[i - 1] ^ n;  

37.            }  

38.            else  

39.                temp[i] = arr[i - 1] ^ arr[i + 1];  

40.        }  

41.  

42.        for (int i = 0; i < 8; ++i)  

43.        {  

44.            arr[i] = temp[i];  

45.        }  

46.    }  

47.    cout << endl<<现在的活跃状态  ";  

48.    for (int i = 0; i < 8; ++i)  

49.    {  

50.        cout << arr[i]<<" ";  

51.    }  

52.}  


 


4.某个图像通过一个整数组成的m*n矩阵表示,其中每个整数表示一个像素值。写出一种方法,根据flag变量的值将图像向右或者向左旋转90°。如果flag值为0,则向左旋转,如果flag1,则向右旋转。


 


函数rotatePictureMethod的输入分别由矩阵matrix、矩阵的维度mn以及flag的值组成。


函数应返回一个指向二维矩阵指针,该矩阵是按照flag值旋转后的结果矩阵而动态分配的。


 


示例:


 


如果标志flag=1m=3,n=3,输入矩阵


 


1  2  3


 


4  5  6


 


7  8  9


 


输出矩阵


 


7  4  1


 


8  5  2


 


9  6  3


 


这题比较简单,另开辟一个矩阵空间,直接赋值即可。代码如下:


 


using namespacestd; 


int**rotatePictureMethod(int **matrix,int m,int n,int flag){ 


   int **mat = new int *[n]; 


   for(int i = 0;i<n;++i) 


       mat[i] = new int [m]; 


   if(flag == 1){ 


       for(int i = 0;i<m;++i){ 


           for(int j = 0;j<n;++j){ 


               mat[n-1-j][m-1-i] =matrix[i][n-1-j]; 


           } 


       } 


   } 


   else{ 


       for(int i = 0;i<m;++i){ 


           for(int j = 0;j<n;++j){ 


               mat[n-1-j][m-1-i] =matrix[m-1-i][j]; 


           } 


       } 


   } 


   return mat; 


} 


//FUNCTIONSIGNATURE ENDS


 


编程题2描述:


 


给定一个整数n,以下列方式打印n行。


 


如果n=4,生成的排列将为:


 


1*2*3*4


 


9*10*11*12


 


13*14*15*16


 


5*6*7*8


 


函数squarePatternPrint的输入应包括一个整数n(假设0<=n<=100)。不要从函数返回任何内容。使用cout打印所需的阵列。


 


各输出行只能由“数字”和“*”组成,不应有空格。


 


有用的命令:cout可将内容打印到屏幕上。


 


分析:这题主要是找规律,从1开始输入自然数,依次增加,每行4个整数,先是第一行,然后最后一行,再是第二行,然后倒数第二行......以此类推。解题的关键是找到每行的首元素的规律分布即可。代码如下:


 


using namespacestd; 


voidsquarePatternPrint(int n){ 


   if(n==0) 


       cout<<""<<endl; 


   else if(n==1) 


       cout<<1<<endl; 


   else if(n%2==0){ 


       for(int i = 0;i<n;i+=2){ 


           for(int i1 =i*n+1;i1<(i+1)*n;++i1){ 


               cout<<i1<<"*"; 


           } 


           cout<<(i+1)*n<<endl; 


       } 


       for(int i =(n-1)*n+1;i>0;i-=2*n){ 


           for(int i1 =i;i1<i+n-1;++i1){ 


               cout<<i1<<"*"; 


           } 


           cout<<i+n-1<<endl; 


       } 


   } 


   else{ 


       for(int i = 0;i<n;i+=2){ 


           for(int i1 =i*n+1;i1<(i+1)*n;++i1){ 


               cout<<i1<<"*"; 


           } 


           cout<<(i+1)*n<<endl; 


       } 


       for(int i =(n-1)*(n-1);i>0;i-=2*n){ 


           for(int i1 =i;i1<i+n-1;++i1){ 


               cout<<i1<<"*"; 


           } 


           cout<<i+n-1<<endl; 


       } 


   } 


} 


 


 


 



0 0
原创粉丝点击