2014华为成都实习招聘软件类机试回忆录

     前两天收到华为软件类实习招聘机试的通知匆匆准备了两天,今天上午上了半节曾哥的课就坐校车赶去清水河参加华为的机试了╮(╯▽╰)╭可能因为是实习招聘,题目比网上流传的要简单点,今年貌似新采取了OJ的形式来机试,但是不像OJ那么严格要限定时间和内存。有三道题,第一题60分,第二题100分,第三题160分,下面是根据我回忆写出的题目和代码:

第一题:

      输入uiMin,uiMax, uiStep,输入的三个变量以逗号间隔开来,变量的类型均为unsigned int,其中uiMin <= uiMax,求表达式 x * (x + 2) +1在区间[uiMax,uiMin]中以uiStep为步长的所有和,要求必须包括uiMax和uiMin。

样例输入:1,3,1

样例输出:29

思路:这道题比较简单吧,有两个要注意的点就是:输入用逗号来间隔开,我用cin.get()来解决这个问题;还有就是要考虑最后一个x超过uiMax的时候要记得把uiMax算上来。下面是我写的代码,典型的用C++语法来写C╮(╯▽╰)╭求勿拍。。

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<windows.h>
 5 
 6 using namespace std;
 7 
 8 int main()
 9 {
10     unsigned int uiMin, uiMax, uiStep, ans, x;
11     cin >> uiMin;
12     cin.get();
13     cin >> uiMax;
14     cin.get();
15     cin >> uiStep;
16     ans = uiMin * (uiMin + 2) + 1;
17     x = uiMin + uiStep;
18     while (x < uiMax)
19     {
20         ans = ans + x * (x + 2) + 1;
21         x = x + uiStep;
22     }
23     if (x == uiMax) ans = ans + x * (x + 2) + 1;
24     else ans = ans + uiMax * (uiMax + 2) + 1;
25     cout << ans << endl;
26     system("pause");
27     return 0;
28 }

第二题具体的题目忘了。。就是解析地址,输入一组字符串,字符串是一个数据帧,对帧内不同类型的数据进行解析,数据帧内的字符是16进制的,要求解析为10进制,分别输出T1,T2,T3,T4(忘了有多少组了==),每组所占数据帧多少个字节是已知的,好像前三组是占一个字节,后两组占两个字节,例如

输入:00010a01021030,

输出:

T1=0

T2=1

T3=10

T4=258

T5= 4144

(大概是这样吧。。忘了有多少组了。。输出的名称也不是Tn。。)

这道题的思路也挺容易想出的就是把字符串放到一个数组里,然后用sscanf()函数打印到另一个数组里面然后就可以处理了。。当时做完第一题后感觉剩下时间只能做一题了,因为第三题分比较高做了第三题,第二题就没时间做了。。回来具体题目也忘了,所以就懒得写了。。

第三题:矩阵构造

 输入一个整数n,构造一个n*n矩阵的上三角矩阵,对该矩阵从1开始顺时针递增填数。,输出格式为左对齐4位。

样例输入:

5

样例输出:

1   2   3   4   5

12 13 14 6

11 15 7

10 8

9

思路:这道题就是刘汝佳白书上那道蛇形填数的例题的变形,构造一个二维数组,然后需要判断边界,具体请参考白书。。一下是我的代码:

  1 #include<iostream>

 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<windows.h>
 5 
 6 using namespace std;
 7 
 8 int main()
 9 {
10     int a[50][50];
11     int n, i, j, tot;
12     cin >> n;
13     memset(a, 0sizeof(a));
14     tot = a[i = 0][j = 0] = 1;
15     while(tot < ((n * n) / 2 + 2) )
16     {
17          while((j + 1) < n && a[i][j + 1] == 0) a[i][++j] = ++tot;
18          while((i + 1) < n && a[i + 1][j - 1] == 0) a[++i][--j] = ++tot;
19          while((i - 1) >= 0 && a[i - 1][j] == 0) a[--i][j] = ++tot;
20     }
21     for(i = 0; i < n; i++)
22     {
23         for(j = 0; j < n; j++)
24         {
25             if(a[i][j] == 0)
26             {
27                 
28                 break;
29             }
30             printf("%-4d", a[i][j]);
31         }
32         cout << endl;
33     }
34     
35     system("pause");
36     return 0;
37 }

 我觉得代码没什么问题,但是提交上去返回信息是答案基本正确,格式错误,我也不知道哪里出了问题o(╯□╰)o

      华为的效率很高。。因为昨天下午接到通知说今天就要面试了。。所以昨天没有更新。。收到短信说是2点面试,为了避免机试时差点迟到的杯具我12点多就去到成研所了。去到那里发现来面试的基本都是研究生。。压力好大。。 先是做了大半个小时坑爹的性格测试(同样坑爹的是机子里的输入法同样打不出我的名字。。)做完性格测试等了一会就被叫去技术面了。先是让我自我介绍一下,然后介绍一下我做的项目,我做的是模糊图像处理方面的,面试官估计对这个不是很懂。。我就在那balabala讲了一堆。。讲的面试官云里雾里的,估计他也不是听得很懂。。(我的表达能力是硬伤==)然后面试官就问了我一些常见的问题:用过malloc函数吧,说说它是怎么分配内存的,这个我刚好昨晚看了一下,就balabala讲了一堆。接着又问了c跟c++的区别,我才刚开始看c++啊。。就随口说c是面向过程,c++是面向对象的,然后杯具就来了。。面试官就抓住面向对象猛问,估计是正好碰上他枪口了,还叫我画了个类图什么的。。我这些设计模式啊什么的都没了解过啊。。就乱画了个类图出来。。然后又问了个好像也是机试的题目吧,不过不是我考的那三道之一,就是字符串压缩问题,我一看这不是跟那道往年的华为机试题差不多的么!我前几天有做过啊,还写了代码出来的呢!但是现场让我手写代码就写不出来了啊。。只是把思路跟面试官说了一下。最后面试官跟我说你的算法能力还不错,你做的那个项目也是研究算法的,但是我们招的是软开,你回去还是去找一些开源项目来做做,做出一个真正的软件出来吧。 就这样被赤果果的BS了o(︶︿︶)o唉 

      回来的感受就是自己的实际工程经验还是太少,还有基础什么的完全比不过大计院的啊。。回去还是好好啃设计模式,好好啃C++,多做些实际项目才是王道!加油!共勉!

       

原文地址:https://www.cnblogs.com/yomman/p/3604215.html