收藏 分享(赏)

大师兄教你如何过华为机试.doc

上传人:精品资料 文档编号:9532221 上传时间:2019-08-13 格式:DOC 页数:20 大小:69.77KB
下载 相关 举报
大师兄教你如何过华为机试.doc_第1页
第1页 / 共20页
大师兄教你如何过华为机试.doc_第2页
第2页 / 共20页
大师兄教你如何过华为机试.doc_第3页
第3页 / 共20页
大师兄教你如何过华为机试.doc_第4页
第4页 / 共20页
大师兄教你如何过华为机试.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、大师兄教你如何过华为机试宝典1内功心法大华为这个大数据时代土豪金海量式的招聘又要开始了!近期听说大华为的校招机试马上就要开始了,由于华为软件岗位的招聘只有技术面跟机试是与技术有关的内容,所以机试的地位非常重要。对于机试,除了长期积累的软件基本功以外,还有很多可以短期训练的东西,类似于考试之前的突击,可以迅速提高机试成绩,就像在我西电大杨老师考前最后一堂课一定要去,那个重点就是考点阿。这篇机试葵花宝典的内容是针对华为软件类上机准备的,如果你认真看了本宝典,如果你是真正通过自己能力考上西电的话,想不过都难。同样想拿高级题的同学,请移步 poj.org,刷上200道题,机试不想拿满分都难。对于机试,

2、首先应该调整好自己的心态,不要觉得写程序很难,机试题很难,也不要去考虑,万一机试考到自己不会的内容怎么办,要相信,机试题永远是考察每个人的基础,基础是不会考的很偏的,会有人恰好做过某个题而做出来那个题,但不会有人恰好没做过一个题而做不出来那个题。机试之前,应该做的准备有:1、 买一本算法竞赛入门经典,这本书不同于普通的算法或者编程语言的书籍,这本书既讲语言,又讲算法,由浅入深,讲的很好,能看完前几章并且把例题都做会,想通过机试就很简单了2、 调整好心态,时刻告诉自己,哪些小错误是自己以前经常犯的,最好用笔记本记录下来,写每道题前再看一遍,如果遇到代码调不出来了,先想想自己是否犯过以前那些错误。

3、还有就是,看了题目以后,先仔细想清楚细节,在纸上写清楚自己需要用到的变量,以及代码的基本框架,不要急于动手去写代码3、 不要惧怕任何一道看起来很难的题目,有不会的就去问身边会的人,让别人给自己讲清楚4、 心中默念10遍C+ 跟C 除了多了两个加号其实没有区别,会C就能上手C+5、 大量的练习是必要且有效的6、 看完这篇宝典,预过机试、必练此功。在这里推荐一个帖子,是机试归来的学长写的,写的很不错,里面的例题在后面的攻略中也会提及, 就在好网上。宝典二:常用招式1:机试常用变量类型CC+常用的变量类型有很多种,想通过机试,掌握好其中的几种就可以,他们分别是int ,double, string,

4、 charint 类型是最常用的整数类型,对于输入类型是整形的变量,使用int来进行定义和读入。还有一种更大的整形变量是long long,在机试中一般不会涉及到考察,如果考虑到运算的过程中有可能超过int的大小,再考虑使用long long ,int最大可以到达 231级别,long long最大可以到达263。PS:有时机试读入多个整数的时候会是这样的形式5,10中间有一个逗号,在这种情况下,其实读入也是很简单的,可以这么写:scanf(“%d%c%d”,或者是:scanf(“%d”,getchar();scanf(“%d”,有的机试题会说:两个整数之间有若干个空格符或tab字符。在这种情

5、况下,读入的方式还是使用scanf(“%d%d”,在这里,a和b 是int,那么x 的值将是a和b整除后的结果,而不是想要的结果,想要得到期望的结果,须改成double x=(a+0.0)/b;在这里,将a加上一个浮点数,程序会在后台将它强制转换成一个double类型的数字,此时再除一个整数,就没有问题了string类型是遇到字符串类问题应该首选的变量,区别于字符数组char,string类型是直接将字符数组封装了进去,定义string s相当于定义了一个大小特别长的字符数组。使用string的好处是,避免了使用char数组时定义数组长度过小导致越界,同时更加直观的将字符串看做了一个对象。如果

6、要定义一个string 变量,首先得包含string 的头文件以及使用C+中的标准命名空间,标准命名空间这个东西,只要记得写上就行,没有任何影响。#include /这一句是c+ 的头文件,c 语言代码一样可以把它包含进来,只要将程序后缀名改成.cpp 即可,其他都是一样的。#includeusing namespace std;在不同的环境下,可能会有不同的头文件包含了string的用法,可能的头文件有cstring,string。在机试的环境中,一般使用string.h即可。定义一个string 和定义其他变量方式相同:string s;读入和输出string 也只需要使用cins;cou

7、t=A i-) 字符串比较大小:如果比较的规则与字符串的比较规则相同,则直接使用s1s2这种方式,如果规则不同,则用一重循环按位比较即可。2、数字处理类数字处理类的题目,最常见的两种考察形式是整数拆分、进制转换和排序。整数拆分是指将一个整数拆分开每一位,比如123拆分成1,2,3。整数拆分的思路有两种,第一种是直接用字符串读入,然后把每一位用字符的形式提取出来:cpp view plaincopyprint?1. for (int i=0;i numi=si-0; 还有一种思路是不断去除以10,把余数提取出来,方法是:cpp view plaincopyprint?1. while (n!=0

8、) 2. 3. numi=n%10; 4. n=n/10; 5. i+; 6. 进制转换:进制转换又分为10进制转换成别的进制以及别的进制转换成10进制,进制转换其实特别简单,只需要记住如下代码:10进制转换成X进制cpp view plaincopyprint?1. while (n!=0) 2. 3. numi=n%x; 4. i+; 5. n=n/x; 6. X进制转换成10进制cpp view plaincopyprint?1. for (int i=0;i#include 2. #include /这个是包含 sort 函数的头文件 3. using namespace std; 4

9、. int arr100,n; 5. int cmp(int x,int y) /这个函数是 sort 函数比较两个元素优先级的函数,在这里计算出两个元素的优先级,然后返回即可。 6. 7. int importance1,importance2; 8. /此处插入代码计算 x,y 的重要性 9. return importance1n; 14. for (int i=0;iarri; 15. sort(arr,arr+n,cmp); 16. return 0; 17. 这一段代码的作用是读入n个数字,然后按优先级进行排序,排序的比较方法在cmp函数中实现,排序的具体过程不需要考虑。可以看到,

10、其实只需要记住sort函数的用法,要通过机试,排序算法是根本不需要学习的,so easy!总结:机试中,掌握好int,double,string,char ,还有数组,就足够用了,但考察的内容不仅仅是上述这些,想要通过机试,还是应该多多练习,多多学习,不局限于上面所说的内容宝典三:擂台实战首先推荐一个网站: ,上面的很多题目,难度很适合机试, 如:很简单:1031,1120,1122,1121,1103,1104,1281,简单:1049 , 1181,1182,1279,1280,中等:1106,1108,1183, 1288.难:1105 ,1282,1283,大家可以根据自己的水平去训练

11、,其实里面的难题也是很简单的,归类到题库中的话都属于简单题,只要好好看书学习都是可以做出来的,下面放几道例题,这些题都是机试很有可能考的题目,或者是非常类似的题目,已经有了仔细的注释,代码写的仓促1. 简单题2. 题目描述 3. 输入一个字符串,删除其中所有的数字,所有大写字母改成小写,其他不变,并输出 4. 5. 输入描述 6. 一个字符串,保证没有空格,以回车符结束,字符串长度 19. #include 20. using namespace std; 21. int main() 22. 23. string s; 24. cins; 25. for (int i=0;i=0 54. i

12、nt f200; /频率数组 55. int biggest=0; /记录最大的值 56. int main() 57. 58. memset(f,0,sizeof(f); /将 f 中的全部元素变成 0,写循环也可 59. string s; 60. cins; 61. for (int i=0;i 95. #include 96. using namespace std; 97. int main() 98. 99. string s; 100. int ans=1; 101. cins; 102. for (int i=s.size()-1;i=0;i-) 103. 104. cout

13、126. #include 127. #include /这个是调用 sort 函数必须的头文件 128. using namespace std; 129. int arr10; 130. int cal(int x) /计算一个数字各个位上的和 131. 132. int ans=0; 133. while (x!=0) 134. 135. ans+=x%10; 136. x/=10; 137. 138. return ans;1 139. 140. int cmp(int i,int j) 141. 142. if (cal(i)!=cal(j) /如果两个数字各个位上的和不相同,则按照

14、各个位上的和来排序 143. 144. return cal(i)arri; 154. sort(arr,arr+10,cmp); 155. for (int i=0;i 179. #include 180. #include /这个是调用 sort 函数必须的头文件 181. using namespace std; 182. int arr31; 183. int main() 184. 185. for (int i=0;iarri; 186. sort(arr,arr+30); /从小到大排序 187. /从最小的开始装框,直到装满了为止。 188. int sum=0; 189. f

15、or (int i=0;i100) break; /如果不能装了就立刻停下来 192. sum=sum+arri; /否则就把这个也装进去 193. 194. /程序跳出的那个位置的 i,就是我们一共装了的数量,如果全部都装了,则 i=30 195. cout 211. using namespace std; 212. int arr10; 213. int main() 214. 215. for (int i=0;iarri; 216. int line; 217. for (line=60;line=0;line-=10) /从高到低枚举分数线 218. 219. int num=0;

16、 /该变量用来统计这个分数线下,是否超过 60%同学及格 220. for (int i=0;i=line) /如果分数大于等于及格线,说明在这个分数线下是及格的 222. num+; 223. if (num=6) /如果超过 60%的人及格,在这里 10 的 60%就是 6 224. break; /满足了要求就立刻 break,说明这是分数线 225. 226. cout 243. #include 244. using namespace std; 245. int vis65536,n; 246. int main() 247. 248. cinn; 249. memset(vis,

17、0,sizeof(vis); /这句话的意思是把 vis 数组清 0,0 表示此刻灯是关着的, 1 表示是开着的 250. for (int i=1;i0,0-1,本质上都是用 1 减去它本身。 253. int ans=0; /统计答案 254. for (int i=1;i 2. 3. 4. void bubbleSort(int arr) 5. 6. int i = 0; 7. int j = 0; 8. int t = 0; 9. 10. for(i = 0;i = 60) 31. 32. return 60; 33. 34. else 35. 36. return (a4 / 10)

18、 * 10); 37. 38. 39. 40. 41. 42. 43. int main() 44. 45. int a10 = 0; 46. 47. scanf(“%d %d %d %d %d %d %d %d %d %d“, 48. 49. printf(“%d“, getPassLine(a); 50. 51. return 0; 52. 描述:一条长廊里依次装有 n(1 n 65535)盏电灯,从头到尾编号 1、2、3、n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。有 n 个学生从长廊穿过。第一个学生把号码凡是 1 的倍数的电灯的开关拉一下;接着第二个学生把号码凡是 2

19、的倍数的电灯的开关拉一下;接着第三个学生把号码凡是 3 的倍数的电灯的开关拉一下;如此继续下去,最后第 n 个学生把号码凡是 n 的倍数的电灯的开关拉一下。n 个学生按此规定走完后,长廊里电灯有几盏亮着。注:电灯数和学生数一致。输入:电灯的数量输出:亮着的电灯数量样例输入:3样例输出:1答案参考:1. #include 2. 3. #define MAX_BULB_NUM 65535 4. /* 5. 功能: n 个学生按规定走完后,长廊里电灯有几盏亮着。 6. 原型: 7. int GetLightLampNum(int n); 8. 9. 输入参数: 10. int n: 电灯/学生的数量

20、。 11. 12. 返回值: 13. int: 亮着的电灯数量。 14. 15. */ 16. 17. int GetLightLampNum(int n) 18. 19. char Bulb_FlagMAX_BULB_NUM = 0; /0 代表灯灭, 1 代表灯亮 20. unsigned int i; 21. unsigned int j = 1; 22. unsigned int Count = 0; 23. 24. if (n 65535) 25. 26. return false; 27. 28. 29. while ( j (busstop.length - len + 2) 4

21、2. len = (busstop.length - len + 2); 43. 44. 45. return len; 46. 47. 48. return INVALID_POSITION; 49. 50. 51. 52. 53. 54. public int getRide(String pointA, String pointB) 55. int i = 0; 56. int min = 255; 57. BusLine lineA = new BusLine(“A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A

22、17 A18“); 58. BusLine lineB = new BusLine(“B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15“); 59. 60. int way = 255, 255, 255, 255, 255, 255, 255, 255; 61. 62. way0 = lineA.getDistance(pointA, pointB); 63. way1 = lineB.getDistance(pointA, pointB); 64. 65. way2 = lineA.getDistance(pointA, “T

23、1“) + lineB.getDistance(pointB, “T1“) - 1; 66. way3 = lineB.getDistance(pointA, “T1“) + lineA.getDistance(pointB, “T1“) - 1; 67. 68. way4 = lineA.getDistance(pointA, “T2“) + lineB.getDistance(pointB, “T2“) - 1; 69. way5 = lineB.getDistance(pointA, “T2“) + lineA.getDistance(pointB, “T2“) - 1; 70. 71.

24、 way6 = lineB.getDistance(pointA, “T1“) + lineB.getDistance(pointB, “T2“) + lineA.getDistance(“T1“, “T2“) - 2; 72. way7 = lineB.getDistance(pointA, “T2“) + lineB.getDistance(pointB, “T1“) + lineA.getDistance(“T1“, “T2“) - 2; 73. 74. for (i = 0; i wayi) 76. min = wayi; 77. 78. 79. 80. return min; 81.

25、 82. 83. public static void main(String args) 84. Main m = new Main(); 85. Scanner cin = new Scanner(System.in); 86. String inputStr = cin.nextLine(); 87. String stops = inputStr.split(“ “); 88. 89. System.out.println(m.getRide(stops0, stops1); 90. 91. 92. 其实后来发现整个过程下来还是有点紧张的。数组、链表、指针、字符串、循环、枚举、排序等内容基本上都考察到了。大家借鉴下吧。我的难度比其他同学难度大了些,最后一个当时没测试通过,回来才调过。做对了两道。加油吧,毕业季里相互分享下资料,互惠互利。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报