ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:29.75KB ,
资源ID:6106770      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6106770.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(华为机试一霸教你过华为机试.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

华为机试一霸教你过华为机试.docx

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

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

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

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

5、:两个整数之间有若干个空格符或tab字符。在这种情况下,读入的方式还是使用scanf(“%d%d”,&a,&b)这样,scanf函数或者cin函数都可以很好的吃掉除了数字字符以外的字符。 double类型是最常用的浮点数类型,当运算涉及到小数运算的时候,需要使用double来定义。其中,特别需要注意的一点是,如果使用了如下语句: double x=a/b; 在这里,a和b是int,那么x的值将是a和b整除后的结果,而不是想要的结果,想要得到期望的结果,须改成 double x=(a+0.0)/b; 在这里,将a加上一个浮点数,程序会在后台将它强制转换成一个double类型的数字,此时再除一个整

6、数,就没有问题了 string类型是遇到字符串类问题应该首选的变量,区别于字符数组char,string类型是直接将字符数组封装了进去,定义string s相当于定义了一个大小特别长的字符数组。使用string的好处是,避免了使用char数组时定义数组长度过小导致越界,同时更加直观的将字符串看做了一个对象。 如果要定义一个string变量,首先得包含string的头文件以及使用C+中的标准命名空间,标准命名空间这个东西,只要记得写上就行,没有任何影响。 #include /这一句是c+的头文件,c语言代码一样可以把它包含进来,只要将程序后缀名改成.cpp即可,其他都是一样的。 #include

7、 using namespace std; 在不同的环境下,可能会有不同的头文件包含了string的用法,可能的头文件有cstring,string。在机试的环境中,一般使用string.h即可。 定义一个string和定义其他变量方式相同: string s; 读入和输出string也只需要使用 cins; couts; 这是比c语言的字符数组要简单了很多的。 需要注意的是,string类型读入的时候与char数组的scanf读入一样,都是遇到空格符或者回车符就停止读入,当做一个完整字符串来处理,因此,使用string处理带空格的字符串是不明智的,其他情况下是都可以的。 string变量包含

8、了很多强大的功能,如: cpp view plaincopyprint? 1. si; /这么写,返回的就是字符串s第i+1位的字符,返回的类型是char型,其中,s0是它的第一位,与字符串相同。 2. s.size(); /返回字符串的长度,返回的长度是l,则s从s0到sl-1表示的是其每一位的字符。 3. if (s1s2) /两个string是可以方便的使用大小于符号以及等于号来比较大小的,比较的方式是,从左向右按位进行比较,每一位按照字典序来比较。如”aaaa”abc”bcd”,但值得注意的一点是,比较的时候应用变量进行比较,即s1s2这种,而不能用”aa”bb”这样,如果要比较他俩的

9、大小,应这么写: 4. s1=aa; s2=bb; 5. if (s1s2) string类型还有很多强大的功能,但是对于机试来说,会使用以上三种功能就足够了。 char50,char100这种字符数组与string类型很像,只不过他是C语言里面的用法,对于机试,只建议在输入带有空格字符的字符串时使用char数组,使用的方式是: gets(s); 在这里,gets函数区别于scanf函数的是,gets函数会直接将一整行读进来,而不会遇到空格就停下来。 常见机试题类型 初级题常见的类型无非就是字符串处理类的题目和数字处理类的题目,在这里归结如下: 1:字符串处理类 字符串所有大写转小写: 1.

10、for (int i=0;i=A & si=Z) 3. si=si-A+a; /si-A返回的是两个大写字母之间的差值,比如C与A的差值是2,这个差值是一个int类型,也可以直接提取出来使用。给这个差值再加上字母a,相当于给a再往后推移二位,变成字母c。这种用法是字符串内最普遍的一种用法,小写转大写也是一样。 删除满足指定要求的字符后输出: 在机试中,判定对错的方式是比较输出的结果,而非检查内部的结果,因此,“删除”对于机试来说,相当于“不输出”,也就是说,不需要调用s.erase()函数,只需要在遇到被删除的字符时,跳过,不输出即可。 1. for (int i=0;i=0;i-) 字符串比

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

12、while (n!=0) 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=length;i+) 2. 3. ans=ans*x+numi; 4. 其中,numi表示的是

13、该x进制数的每一位,比如一个二进制数101,用这种转换方式去转换,ans的值从i=0到i=2处理后分别是1,2,5。 排序: 排序这个东西,其实不需要学习冒泡啊、快排啊之类的算法,应对机试,C+中自带的sort函数就可以很好的解决,请看下面一段代码 cpp view plaincopyprint? 1. #include 2. #include /这个是包含sort函数的头文件 3. using namespace std; 4. int arr100,n; 5. int cmp(int x,int y) /这个函数是sort函数比较两个元素优先级的函数,在这里计算出两个元素的优先级,然后返回

14、即可。 6. 7. int importance1,importance2; 8. /此处插入代码计算x,y的重要性 9. return importance1importance2; /此处返回小于号,意思是优先级小的在前,如return xn; 14. for (int i=0;iarri; 15. sort(arr,arr+n,cmp); 16. return 0; 17. 这一段代码的作用是读入n个数字,然后按优先级进行排序,排序的比较方法在cmp函数中实现,排序的具体过程不需要考虑。 可以看到,其实只需要记住sort函数的用法,要通过机试,排序算法是根本不需要学习的,so easy!

15、 总结:机试中,掌握好int,double,string,char,还有数组,就足够用了,但考察的内容不仅仅是上述这些,想要通过机试,还是应该多多练习,多多学习,不局限于上面所说的内容 宝典三:擂台实战 首先推荐一个网站: 很简单:1031,1120,1122,1121,1103,1104,1281, 简单:1049,1181,1182,1279,1280, 中等:1106,1108,1183,1288. 难:1105,1282,1283, 大家可以根据自己的水平去训练,其实里面的难题也是很简单的,归类到题库中的话都属于简单题,只要好好看书学习都是可以做出来的,下面放几道例题,这些题都是机试很

16、有可能考的题目,或者是非常类似的题目,已经有了仔细的注释,代码写的仓促 1. 简单题 2. 题目描述 3. 输入一个字符串,删除其中所有的数字,所有大写字母改成小写,其他不变,并输出 4. 5. 输入描述 6. 一个字符串,保证没有空格,以回车符结束,字符串长度=20 7. 输出描述 8. 一个字符串,为题目要求的结果 9. 10. 输入样例 11. aAbB13A 12. 输出样例 13. aabba 14. 15. 解题思路:模拟题目要求即可,遇到数字就跳过不输出,遇到大写字母就改成小写。 16. 17. */ 18. #include 19. #include 20. using nam

17、espace std; 21. int main() 22. 23. string s; 24. cins; 25. for (int i=0;i=0 & si=A & si=Z) si=si-A+a; /遇到大写字母就改成小写 29. coutsi; 30. 31. coutendl; 32. 33. 34. 简单题 35. 题目描述 36. 输入一个字符串,统计其出现频率最高的字符,并输出。若存在两个字符出现频率相同,则输出字典序较小的那一个 37. 38. 输入描述 39. 一个字符串,保证没有空格,以回车符结束,字符串长度=20 40. 输出描述 41. 一个字符 42. 43. 输入

18、样例 44. aabbaabb 45. 输出样例 46. a 47. 48. 解题思路:做一个频率数组来统计所有字符的出现频率,机试时候不会有汉字输入,因此只考虑输入是ASCII编码的情况。 49. 50. */ 51. #include 52. #include 53. using namespace std; 54. int f200; /频率数组 55. int biggest=0; /记录最大的值 56. int main() 57. 58. memset(f,0,sizeof(f); /将f中的全部元素变成0,写循环也可 59. string s; 60. cins; 61. for

19、 (int i=0;is.size();i+) /枚举字符串的每一位 62. 63. int num=si; /将si转换成它的ascii码 64. fnum+; /频率次数加1 65. biggest=max(biggest,fsi); /比较找出最大的 66. 67. for (int i=0;i=129;i+) /枚举所有的字符的频率,找出频率最高且字典序最小的那一个 68. if (fi=biggest) /如果满足要求 69. 70. cout(char)(i)endl; 71. break; /这句break保证了我们只会输出一个满足要求的结果 72. 73. 74. /* 75.

20、 简单题 76. 题目描述 77. 输入一个数字,将其倒序输出,并输出其各个位上的乘积 78. 79. 输入描述 80. 一个正整数,保证在int范围内 81. 输出描述 82. 两个数字,用空格隔开,第一个数字为其倒序的值,第二个数字是各个位上的乘积 83. 84. 输入样例 85. 134 86. 输出样例 87. 431 12 88. 89. 90. 解题思路:删繁就简,直接当字符串读入,处理就简单多了。 91. PS:此处不用纠结于题意,没有特别强调是按照一个数的格式输出,因此可以有前导0 92. 93. */ 94. #include 95. #include 96. using n

21、amespace 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. coutsi; /倒序输出每一位 105. ans=ans*(si-0); /ans累乘每一位的值 106. 107. cout ansendl; 108. 109. 中级题 110. 题目描述 111. 输入10个数字,按各个位上的和从小到大排序,如果相同,则按数字从小到大排序。 112. 113. 输入描述 114. 10个正整数,保证都在int范围内,用

22、空格隔开 115. 输出描述 116. 10个数字,其从大到小的值,用空格隔开,最后一个数字后不加空格 117. 118. 输入样例 119. 11 3 2 4 5 9 8 7 10 6 120. 输出样例 121. 10 2 11 3 4 5 6 7 8 9 122. 123. 解题思路:调用C+自带的sort函数,重新改写compare函数即可。 124. */ 125. #include 126. #include 127. #include /这个是调用sort函数必须的头文件 128. using namespace std; 129. int arr10; 130. int cal

23、(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) /如果两个数字各个位上的和不相同,则按照各个位上的和来排序 143. 144. return cal(i)cal(j); 145. 146. else /否则,即两个数各个位上的和相等,则按照数字本身来排序 147. 148. return ij

24、; 149. 150. 151. int main() 152. 153. for (int i=0;iarri; 154. sort(arr,arr+10,cmp); 155. for (int i=0;i=9;i+) 156. 157. coutarri; 158. if (i!=9) cout ; /如果不是最后一个数字,则需要在两个数字中间输出一个空格。 159. 160. coutendl; 161. /PS:最后一个输出的后面一定要跟回车符而不是空格符 162. 163. 中级题 164. 题目描述 165. 你有一个容量为100的箩筐,给你30个物品,每个物品的体积已知问:最多能

25、装多少个物品进箩筐 166. 输入描述 167. 一行30个正整数,用空格隔开,表示每个物品的体积 168. 输出描述 169. 一个数字,为最多能装下的物品数 170. 171. 输入样例(此处用3个物品作为样例,实际读入为30个) 172. 5 59 100 173. 输出样例 174. 2 175. 176. 解题思路:利用性价比对所有物品进行排序,优先装性价比高的,在此题中,性价比就是物品的体积 177. */ 178. #include 179. #include 180. #include /这个是调用sort函数必须的头文件 181. using namespace std; 1

26、82. int arr31; 183. int main() 184. 185. for (int i=0;iarri; 186. sort(arr,arr+30); /从小到大排序 187. /从最小的开始装框,直到装满了为止。 188. int sum=0; 189. for (int i=0;i100) break; /如果不能装了就立刻停下来 192. sum=sum+arri; /否则就把这个也装进去 193. 194. /程序跳出的那个位置的i,就是我们一共装了的数量,如果全部都装了,则i=30 195. coutiendl; 196. 197. 初级题:(此题是我曾经做的机试题) 198. 描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下: 199. (1) 及格线是10的倍数; 200. (2) 保证至少有60%的学生及格; 201. (3) 如果所有的学生都高于60分,则及格线为60分 202. (4) 及格线越高越好,但最高不能超过60 203. 输入:输入10个整数,取值0100 204. 输出:输出及格线,10的倍数 205. 输入样例:61 51 49 30 20 10 70 80 90 99

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1