大师兄教你如何过华为机试
华为机试成功归来,与小伙伴们分享下经验(西电)
抒情:前段时间参加华为机试,机试通过的可以优先录取,优先选择岗位和工作地,关键是面的好,还可以谈更高的工资,最多在西安可以拿到18W。
好处还是蛮多的,抱着试试看的态度就去了。
疗效还不错。
提前在网上交了简历,周围同学只要报了软件研发类的相关岗位都收到短信通知,需要用到编程的同学基本上都受到短信了。
一天三波,在西工大毅字楼三楼机房,南门进去直走左拐就到了,我是第二天早上的机试,前一天已经听机试过的同学考的内容涉及数组、链表、指针、字符串、循环、枚举、排序等吧,这个估计要看人品,平时出门多扶老奶奶过马路吧。
其实考过后发现这个机试跟平时做项目不一样,项目可能更多的注重实现研究所需要的某个功能不会去注意这么多细节,但是机试考的更多的是基本功。
下面重点跟大家分享下上机题吧,我只列举了我抽到的三个,其他同学抽到的跟这个大同小异吧。
大家自己编写下,对即将开始的面试都会有帮助的。
考试内容:数组、链表、指针、字符串、循环、枚举、排序等(从考过的同学那儿总结的可能不全)试题结构:考试总共三道题,说是难中易,初级题(60分)、中级题(100分)、高级题(160分),最难的接近一百行,说多不多,但自己敲出来还是费了点劲,考试时间:两个小时。
平时练得少可能稍微捉鸡点。
最简单的一个描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:(1) 及格线是10的倍数;(2) 保证至少有60%的学生及格;(3) 如果所有的学生都高于60分,则及格线为60分输入:输入10个整数,取值0~100输出:输出及格线,10的倍数输入样例:61 51 49 3020 10 70 80 90 99输出样例:50自己编写代码简单如下:1. #include <stdio.h>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 < 10; i++)11. {12. for(j = 0; j < (9 - i); j++)13. {14. if(arr[j + 1] < arr[j])15. {16. t = arr[j + 1];17. arr[j + 1] = arr[j];18. arr[j] = t;19. }20. }21. }22. }23.24. int getPassLine(int a[])25. {26. int i = 0;27.28. bubbleSort(a);29.30. if (a[0] >= 60)31. {32. return 60;33. }34. else35. {36. return ((a[4] / 10) * 10);37. }38.39. }40.41.42.43. int main()44. {45. int a[10] = {0};46.47. scanf("%d %d %d %d %d %d %d %d %d %d", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8], &a[9]);48.49. printf("%d", getPassLine(a));50.51. return 0;52. }描述:一条长廊里依次装有n(1 ≤n ≤65535)盏电灯,从头到尾编号1、2、3、…n-1、n。
记一次华为机试
记⼀次华为机试介绍华为机试分为 3 题,两题 100 分,⼀题 200 分,压线 150 分算你过,时间150分钟,⽀持多语⾔环境(⽜客⽹),考试时需全程打开摄像头,电脑屏幕分享,⼿机打开某⼩程序(可⽤计算器)不退出,可⽤本地 IDE, 会有⼀些测试题给你熟悉环境预热的。
备注: 由于脑容量有限,题⽬具体的描述笔者已经记不清了,但是⼀些考点还是记忆犹新,遂记录分享下。
做机考这⼏点很重要, 第⼀点是你要看明⽩它的输⼊输出是什么? 第⼆点是要快,⽐如说你明知道有现成的意⼤利炮可以轰它,咱就不要⾃⼰造个⼟炮了,挺浪费时间的,毕竟机考的本质其实是刷⼈, 第三点就是⼼态⼀定要好,你会做的你要尽量 100%把它做出来,遇到不会的智商题,那也就听天由命了。
消消乐(字符串)描述给定⼀个只包含⼤⼩写字母的字符串(⼤⼩写敏感),若相邻两个元素相等则消除,直到最后字符串消除不了了,输出消消乐后字符串的长度,若遇到⾮⼤⼩写字母以外的字符,则输出0。
⽰例输⼊: mMbccbc输出: 3解释:cc消掉,然后bb消掉,最后剩余mMc,输出长度3题解这⾥我是把⼀些特殊情况单独拎出来处理,然后创建了⼀个字符串res去存最后得到的字符串,然后输出其长度。
const readline = require('readline');const rl = readline.createInterface({input: process.stdin,output: process.stdout,});rl.on('line', function (line) {console.log(solution(line.trim()));});function solution(str) {if (/[^a-zA-Z]/.test(str)) {return 0;}if (str.length === 1) {return 1;}if (str.length === 2) {if (str[0] === str[1]) {return 0;} else {return 2;}}let res = '';let cur = 0;for (let i = 0; i < str.length - 1; i++) {if (str[i] === str[i + 1]) {i++;} else {if (res.length > 0 && res[res.length - 1] === str[i]) {res = res.slice(0, res.length - 1);} else {res += str[i];}}cur = i;}cur = cur + 1;if (str[cur]) {if (res[res.length - 1] === str[cur]) {res = res.slice(0, res.length - 1);} else {res += str[cur];}}return res.length;}矩阵最⼤值(⼆维矩阵)描述给定⼀个n*n的只包含0和1的⼆维矩阵,请你计算出该矩阵的最⼤值。
华为面试秘笈
华为面试秘笈华为面试秘笈----- batman作为华为面试过来者,给想进入华为的同仁一些面试方面的经验和技巧,希望能够对大家有点点的帮助,但多数情况下需要面试者自己的反应能力了。
我个人认为,只要有过一年多的工作经验,技术面试基本没有什么问题。
但是,要说明一点的是,华为招人的原则大家是知道的,本三硕二,而且本科以前是需要211的大学,现在据说要改规矩了,要求是指定的几所大学,具体尚不明确。
但是如果你有3年以上工作经验,基本上这方面的限制就没有了。
面试分为4轮:1)技术面试,一般是部门的技术专家;2)综合面试,一般是10-17个人分两组,3-4个面试官进行压力测试,面试官一般是人力的;3)人力面试,基本上是了解个人的一些常见的问题,综合素质以及待遇等;4)部门老大面试,基本上是和你谈薪资待遇,一般情况下就是谈下你的工作经历,这是搞忽悠的,基本上就是了解些信息后好给你砍价,这就是他们的职责,不管你要的多低都要砍个100-2000这个样子,不要钱的例外 ^_^。
技巧:对应上面的四点1)技术面试如果有人推荐或者有里面的人打电话找到你了,基本上做个电话面试就不需要做题目了,然后会有秘书在周五下午之前会发送邀请短信以及注意事项给你,让你周六过去面试。
过去后找到相应的接待的小姐,说你有预约,这时候她会告诉你,你在等候区等待即可,否则,你需要做题,软件一般是C语言的基础,网络上有很多,考试的内容基本上是换汤不换药,就那几个方面。
2)综合面试的情况如下。
一般会有10-17人参加,根据当天参加面试人数的多少决定。
面试的内容分为三个个环节,第一是自我介绍,第二是小组讨论,第三是总结。
首先会发每人一张纸,折为四段或者三段,等分,然后折成一个三个面的形状,一面贴桌上,另两面写上自己的名字。
=========自我介绍部分:【言简意赅】自我介绍要点:叫什么,哪里人,什么时候毕业,毕业哪个学校,简单介绍下工作经历,强调下,是简单,不喜欢罗嗦的人,但是要有条理,然后就是你的爱好,优点,缺点,座右铭和人生目标等。
华为面试常见问题回答技巧
16个经典面试问题答复思路面试过程中,面试官会向应聘者发问,而应聘者的答复将成为面试官考虑是否接受他的重要依据。
对应聘者而言,了解这些问题背后的“猫腻〞至关重要。
本文对面试中经常出现的一些典型问题进行了整理,并给出相应的答复思路和参考答案。
读者无需过分关注分析的细节,关键是要从这些分析中“悟〞出面试的规律及答复下列问题的思维方式,到达“活学活用〞。
问题一:“请你自我介绍一下〞思路:1、这是面试的必考题目。
2、介绍内容要与个人简历相一致。
3、表述方式上尽量口语化。
4、要切中要害,不谈无关、无用的内容。
5、条理要清晰,层次要清楚。
6、事先最好以文字的形式写好背熟。
问题二:“谈谈你的家庭情况〞思路:1、况对于了解应聘者的性格、观念、心态等有一定的作用,这是招聘单位问该问题的主要原因。
2、简单地罗列家庭人口。
3、宜强调温馨和睦的家庭气氛。
4、宜强调父母对自己教育的重视。
5、宜强调各位家庭成员的良好状况。
6、宜强调家庭成员对自己工作的支持。
7、宜强调自己对家庭的责任感。
问题三:“你有什么业余爱好?〞思路:1、业余爱好能在一定程度上反映应聘者的性格、观念、心态,这是招聘单位问该问题的主要原因。
2、最好不要说自己没有业余爱好。
3、不要说自己有那些庸俗的、令人感觉不好的爱好。
4、最好不要说自己仅限于读书、听音乐、上网,否那么可能令面试官疑心应聘者性格孤僻。
5、最好能有一些户外的业余爱好来“点缀〞你的形象。
问题四:“你最崇拜谁?〞思路:1、最崇拜的人能在一定程度上反映应聘者的性格、观念、心态,这是面试官问该问题的主要原因。
2、不宜说自己谁都不崇拜。
3、不宜说崇拜自己。
4、不宜说崇拜一个虚幻的、或是不知名的人。
5、不宜说崇拜一个明显具有负面形象的人。
6、所崇拜的人人最好与自己所应聘的工作能“搭〞上关系。
7、最好说出自己所崇拜的人的哪些品质、哪些思想感染着自己、鼓舞着自己。
问题五:“你的座右铭是什么?〞思路:1、座右铭能在一定程度上反映应聘者的性格、观念、心态,这是面试官问这个问题的主要原因。
我来说说华为机试
代码见:6.cpp
相信通过题2、题3,在找最大、最小数时,不论是数组还是字符类型都可以轻松应对了。
3)链表
题7:
一组人(7个),围成一圈,从某人开始数到第3个的人出列,再接着从下一个人开始数,依次输出出列的人。(报数:共n个人从1编号,设从第s个人报号,报到m出队,依次输出出队的人。)
代码见:20.cpp
题21:
写一个程序实现功能:将两个字符串合并为一个字符串并且输出,用指针实现。
代码见:21.cpp
题22:
给定一个字符串,实现一个函数,按下述方式输出字符串:如果此字符的下一个字符和此字符不一样,原样输出此字符,否则先输出此字符,再输出此字符连续出现的次数(次数不大于9)。
例如,字符串ABBCCCDEDFFF,输出的结果为AB2C3DEDF3。不用考虑溢出问题,不能使用任何I/O函数。
例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}
代码见:3.cpp
题4:
输入一组身高在170到190之间(5个身高),比较身高差,选出身高差最小的两个身高;若身高差相同,选平均身高高的那两个身高;从小到大输出;
求两个长长整型的数据的和并输出。
代码见:9.cpp
题10:
在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。
华为认证考场十招技巧
华为认证考场⼗招技巧
华为认证考场⼗招技巧
有些考⽣的华为认证考试成绩往往会超过平时的⽔平,⽽有些同学则正好相反,这就是如何发挥考试技巧的问题。
我建议你不妨按以下⽅法试试看。
(1)注意临场⼼理调节。
当你进⼊考场后切莫慌张,可⽤“我能⾏”、“静⼼”、“认真”等⾃我暗⽰来稳定⾃⼰的情绪。
(2)把家庭、学校、社会的压⼒全丢掉,轻装上阵,尽⼒⽽为。
(3)拿到试卷后,不要急于动笔,⽤⼗分钟时间浏览试题,领略各题的'难易、分值,然后合理安排答题时间。
(4)答题前,要逐字逐句审清题意,明了要求。
答题⼒争简明扼要,答其所问。
卷前的“注意事项”要仔细过⽬。
(5)分值较⼩的题,如果⼀时做不出来,可先放⼀放,抢时间先做会做的题,然后再回头考虑本题。
(6)有些看起来较容易的题⽬,其中可能有难点,切忌疏忽⼤意。
(7)巧⽤图表法,碰到有些数学难题,可将已经数和未知数之间的关系列成图表,然后进⾏分析。
找出解题的⽅法。
(8)复查是考试中的重要⼀环,如果时间来不及,宁可把做完的题先复查⼀遍,⽽不做⽆把握的题。
(9)不要见别⼈交卷就着慌,草率收兵,要⼒争在规定时间内圆满的答完、检查完。
(10)考完⼀科后,精神要放松,不要参加考⽣之间的议论或互相对答案。
应抓紧时间清醒头脑,做好考下⼀科的准备。
华为机试题目总结(程序篇)
华为机试题目总结(程序篇)自己写的,水平很挫,仅供参考目录1.语言识别问题2.销售网络问题(未完成)3.股票投资问题4.判断手机号码合法性5.元音字母复制6.验证身份证号7.选秀节目打分8.数组最大值放中间,其他依次放其左右(规律未找着,未完成)9.任务调度(解题关键,需要一个容器来承载下标跟值的一一对应关系,最好就是定义一个结构体)10.将某字符变成小写后的某个字符11.链表的逆序12.单词统计13.字符串进行转换,转换成相应的数字已知:yi er san si wu liu qi ba jiu 分别对应,对一段只含有这几种字符的字符串进行转换,转换成相应的数字14.一个数组中比平均数大的个数15.求一个数组中第一大和第二大数16.字符变成整数17.整数变字符18.判断素数问题19(1).约瑟夫环(循环列表)19(2).约瑟夫环(数学方法只能求出最后的胜利者的序号)19(3).约瑟夫环(容器实现)20.判断某个整数是回文。
即这样的,反过来还是21.判断一个字符串是不是回文22.求一个字符串中的最大回文子串,就是从n个字符开始检查是不是回文,知道m个字符符合回文,那么这个就是最大回文23.找出^n的数24.统计一个数二进制表达中的个数25.镜像反转二进制表达式,并输出十进制值26.连续字符统计27.判断一个字符串中()是否配对28.查找子字符串个数29(1).找出一个字符串中是否包含相同(包括连续的)的子字符串(要求子串长度大于等于)并输出出现频率最高的子字符串29(2)找出一个字符串中是否包含连续相同的子字符串,并输出出现频率最高的子字符串30.删除字符窜中字符数最少的字符31.关于数组的循环移位,左移为负,右移为正32.求一个二维数组每列的最小值33.两个字符串,求最长公共子串34.超大整数加法运算,大整数会用字符串或者数组来存,不过注意低位存字符前面几位,高位存后面,存到字符中应该存“”。
华为公司软件类上机考试说明(南京)
华为地区校园招聘软件类上机考试说明同学您好!欢迎您应聘华为公司。
软件类研发岗位(软件开发、云计算、操作系统开发、数据库开发)需要提前进行上机考试。
现将上机考试做如下说明。
一、题目类别本次上机考试题目设置C/C++、Java两个类别,根据个人情况选作一个类别。
二、题目数量每个考生有三道题,第一二道题必答,第三道题为附加题可以选作,附加题做出,成绩会计入总分。
三、考试时间安排1、从10月中旬安排分批上机考试2、每个考生上机考试时间为2小时四、上机考试步骤1、打开IE输入服务器的IP地址或者直接打开收藏夹中已经收藏好的地址;2、输入姓名和手机号,选择考试语言,提交登录:3、登录后会进入试题说明页面,考试阅读完试题要求后,在页面下方点击下载试题框架并解压到D盘。
如果是C/C++则用VC打开工程进行编程,只在func.cpp文件中进行函数编写,函数名已经定义好;如果是Java则用Eclips打开Java工程进行编程,只在SWTest.java文件中进行函数编写,函数名已经定义好。
注意,考生不要进行任何IO输入输出的处理(题目说明中已经有写了),否则会得0分。
4、编完代码并编译和调试通过后,点击试题页面下方的按钮,在弹出的窗口中,如果是C/C++则将test.exe和func.cpp拷贝到一个新建的名为test的目录中然后打包该目录上传,如果是Java则将工程仍然打包为SWTest.rar一次性上传(这个过程非常重要,否则会因无法自动判卷而得0分)。
上传之后页面会显示“提交成功”,然后关闭所有IE窗口并清空客户机中您所创建的所有内容后结束考试离开考场。
五、如何阅卷1、考生提交试卷后,我们在服务器后台执行系统阅卷程序,进行自动判卷,不进行人工阅卷。
2、系统设置了多个测试用例,根据用例执行的情况判断考生所上机考试的分数。
六、样题编写一个函数,统计出具有n个元素的一维数组中大于等于所有元素平均值的元素的个数并返回。
华为机试经验
华为机试经验题⽬说明:第⼀道题:举办⼀场8⼩时的聚会,时间段从12:00到20:00点,让来访的客⼈事先填好到达的时间和离开的时间,为了掌握聚会期间的座位数⽬,需要先估计不同时间的最⼤客⼈数量。
1.到达和离开的时间,以整点计算,输⼊为整数,⽐如“12,18”表⽰客⼈到达的时间为12点后13点前,离开的时间是17点后18点前。
2.按⼩时区间统计客⼈的数量,需要统计[12,13),[13,14)….[19,20)共有8个时间段的最⼤客⼈数量。
3.假设邀请的客⼈最多100个。
假设输⼊:12,1516,1712,20-1,-1程序要求的输出结果为:[12,13):2[13,14):2[14,15):2[15,16):1[16,17):2[17,18):1[18,19):1[19,20):1解题思路如下:如上图,就是要将每个时间段的值加⼊map做⼀个统计。
代码如下:package com.example.zookeepertest.web;import javax.sound.midi.Soundbank;import java.io.IOException;import ng.reflect.Array;import java.util.*;import java.util.stream.Collectors;public class JvmTest {public static void main(String[] args) throws IOException {Map<String, Integer> result = new HashMap<>();String temp = "16,18";String[] split = temp.split(",");int a = Integer.valueOf(split[0]);int b = Integer.valueOf(split[1]);if (a > b || a < 12 || b > 20) {return;}for (int i = a; i < b; i++) {String key = "[" + i + "," + (i + 1) + ")" + ":";if (result.containsKey(key))result.put(key, result.get(key) + 1);elseresult.put(key, 1);}result.entrySet().stream().sorted(Map.Entry.<String, Integer>comparingByKey().reversed()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (o1, o2) -> o1, LinkedHashMap::new)); result.entrySet().forEach(e -> System.out.println(e.getKey() + e.getValue()));}}难点:map排序,这个是我写的时候在⽹上搜的。
华为机试ACM(字符组合问题)
华为机试ACM(字符组合问题)今晚做了华为的机试,3道ACM题,最后⼀道是实现从M个不同字符中任取N个字符的所有组合。
eg: input:ABC 2output:AB AC BC第⼀个输⼊为字符串,第⼆个输⼊为组合的字符个数,当N=0或者N>M时,输出“ERROR”。
思路:可以⽤递归的算法解决,例如ABC中2个字符的所有组合,先选取第⼀个的A,那包含A的2个字符的所有组合就是从后⾯剩余的BC中取1个字符的所有组合,然后选取第⼆个的B,那包含B的2个字符的所有组合就是从后⾯剩余的C中取1个字符的组合,即只有C,到选取第三个的C时,后⾯已经没有字符了,不⾜以组成2个字符的组合。
以此类推,将从M个不同字符中任取N个字符的所有组合递归成从M-1个不同字符任选N-1个字符的所有组合(包含“A”)加上从M-1个个不同字符任选N个字符的所有组合(不包含“A”)。
import java.util.*;public class Main {public static void main(String args[]){Scanner cin = new Scanner(System.in);String str = cin.next();int maxCount = cin.nextInt();char[] chs = str.toCharArray();if(maxCount==0 ||maxCount>str.length()){System.out.print("ERROR");}combination(chs, 0, 0, maxCount, "");}/** @param chs 输⼊的字符数组* @param index 选取的字符所在的数组索引值* @param count 已经选取字符的个数* @param maxCount 输⼊的要选取字符的个数* @param result 已经选取的字符组合**/public static void combination(char[] chs, int index, int count, int maxCount, String result) {if (count == maxCount) {System.out.print(result+" ");return;}for (int i = index; i < chs.length; ++i) {combination(chs, i + 1, count + 1, maxCount, result + chs[i]);}}}。
华为机试评分标准
华为机试评分标准
华为机试评分标准是指在华为公司中,应聘者进行技术面试前需要通过一次技术机试,机试评分标准是评估应聘者技术水平的重要依据。
在机试评分标准中,华为公司设置了一系列的测试要求和评分标准。
以下是具体的分步骤阐述:
第一步:编程基础测试
在机试的开始阶段,招聘官会考察应聘者的基本编程能力,包括语法熟练度、代码风格等方面。
此环节是判断是否具备参加机试的基本条件,因此需要各个细节都做得尽善尽美。
第二步:算法能力测试
在编程基础测试合格之后,华为公司还会对应聘者的算法能力进行测试,阅读、理解题目描述,在规定时间内完成代码并进行测试,达到不同的题目难度的测试点要求。
该环节主要考察应聘者的算法设计能力、代码实现能力、调试能力和问题解决能力。
第三步:问题解决能力测试
在通过了前两个环节之后,华为公司还需要考察应聘者的问题解决能力。
这一环节比较具体针对具体行业问题的解决方式进行考察,例如网络通信、数据库、缓存等领域。
要求应聘者给出高效的解决方案,并对方案进行详细的解释,以证明方案可行性。
第四步:综合评分
华为公司基于以上测试结果,对于应聘者的技术实力进行打分,并对分数进行汇总和比较,最终决定在面试环节中是否予以进一步考虑。
总之,华为公司的机试评分标准是非常严格和具有科学性的,除了基本的编程语言技能外,还需要依照面试职位的需求,对技术知识广度和深度的要求义将更高。
因此,应聘者在机试前,除了熟悉基本的编程知识外,还需要提前备考,深入了解公司的核心业务,并且将自己的经验与特长与职位要求进行匹配,提高自己的软实力水平,以期在机试中取得好成绩。
我来说说华为机试
受乔哥的启发,决定写一个关于华为机试的简介,首先声明本人并非大牛,也无权拿到华为的内部资料,以下内容大部分源自网络,还有一部分是自己的感悟,本文以整理和疏导为主。
由于我不会JAVA,在这也就不写JAVA的东西了吧,下面的内容以C/C++为主。
分为几个部分:第一部分是华为机试流程、题型等相关介绍,第二部分是一些经典题目的剖些,第三部分是一些提示和建议。
一、华为机试介绍1.大致介绍时间:120分钟环境:Visual Studio(去年是vs2005)、Visual C++、Eclipse(Java)题量:共3题初级题——60分——3组测试数据中级题——100分——5组测试数据高级题——160分——8组测试数据注:初级题和中级题为必答题,高级题为附加题。
提交次数:每题最多5次评判方式:按通过测试数据组数给分,每通过一组得20分2.考试说明这里有一个老版的机试考试说明,供大家参考:C/C++,JAVA机试流程:①打开IE浏览器,输入机试系统IP地址(以当天告知的地址为准);②输入姓名、手机,选择“C/C++”或“JAVA”,登录;③登录后显示题目,阅读题目并点击页面最下方“下载框架文件”,将文件解压到D盘;④用VC6.0或Eclipse打开工程工程;⑤补充函数体、调试;⑥将工程压缩打包;⑦返回IE浏览器中的试题页面,点击最下方的“提交”按钮,完成提交。
3.注意事项华为的机试阅卷为电脑自动阅卷,大致流程是输入测试数据,判断结果是否正确,所以,在编写好程序后,一定要多测试几组数据,至少要保证题目中测试数据输入后,结果符合题目要求。
二、经典题目剖析1.在分析具体题目之前,有几个注意事项说一下:1)同学们平时写代码的编译环境不太一样,大致有GCC/G++,VC,VS,在这几种之中又细分了好多个版本,但是既然是准备华为机试,那么就装个最简单的VS 2005吧,只要代码在这个版本上通过,相信机试的时候也不会出问题。
牛客网——华为机试(题22:汽水瓶)(Java)
⽜客⽹——华为机试(题22:汽⽔瓶)(Java)题⽬描述:有这样⼀道智⼒题:“某商店规定:三个空汽⽔瓶可以换⼀瓶汽⽔。
⼩张⼿上有⼗个空汽⽔瓶,她最多可以换多少瓶汽⽔喝?”答案是5瓶,⽅法如下:先⽤9个空瓶⼦换3瓶汽⽔,喝掉3瓶满的,喝完以后4个空瓶⼦,⽤3个再换⼀瓶,喝掉这瓶满的,这时候剩2个空瓶⼦。
然后你让⽼板先借给你⼀瓶汽⽔,喝掉这瓶满的,喝完以后⽤3个空瓶⼦换⼀瓶满的还给⽼板。
如果⼩张⼿上有n个空汽⽔瓶,最多可以换多少瓶汽⽔喝?输⼊描述:输⼊⽂件最多包含10组测试数据,每个数据占⼀⾏,仅包含⼀个正整数n(1<=n<=100),表⽰⼩张⼿上的空汽⽔瓶数。
n=0表⽰输⼊结束,你的程序不应当处理这⼀⾏。
输出描述:对于每组测试数据,输出⼀⾏,表⽰最多可以喝的汽⽔瓶数。
如果⼀瓶也喝不到,输出0。
⽰例1:输⼊:31081输出:1540代码:import java.util.*;public class Main {public static void main ( String[] args ) {Scanner in = new Scanner( System.in );while( in.hasNextLine()) {int n = Integer.parseInt( in.nextLine() );if ( n == 1 ) {System.out.println( 0 );break;}if ( n == 0 ) {break;}int x = n / 3 + n % 3;int sum = n / 3;if ( x >= 3 ) {do {sum += x / 3;x = x % 3 + x / 3;} while( x >= 3 );if ( x == 1 ) {System.out.println( sum );}if ( x == 2 ) {System.out.println( sum+1 );}}else if ( x == 1 ) {System.out.println( sum );}else {System.out.println( sum+1 );}}in.close();}}。
华为机试以及注意事项
华为机试以及注意事项华为机试以及注意事项机试题目所考察的都是较为基础的编程能力,希望大家做好准备,在机试现场调整好心态、认真审题、细心答题。
现将系统的使用情况及注意事项简单说一下。
机试前准备:进入机试考场前会给每位同学发一张《考试说明》,请大家务必仔细研读。
C/C++机试流程:①打开IE浏览器,输入机试系统IP地址(以当天告知的地址为准);②输入姓名、手机,选择“C/C++”或“JAVA”,登录;③登录后显示题目,阅读题目并点击页面最下方的“下载框架文件”,将文件解压到D盘;④用VC6.0打开工程test.dsw;⑤补充函数体、调试;⑥新建test文件夹(如在桌面上新建),将func.cpp和test.exe 文件复制到该文件夹中,压缩该test文件夹;⑦返回IE浏览器中的试题页面,点击最下方的“提交”按钮,完成提交。
JAVA机试流程:①打开IE浏览器,输入机试系统IP地址(以当天告知的地址为准);②输入姓名、手机,选择“C/C++”或“JAVA”,登录;③登录后显示题目,阅读题目并点击页面最下方的“下载框架文件”,将文件解压到D盘;④用Eclipse打开工程⑤补充函数体、调试;⑥将工程压缩打包;⑦返回IE浏览器中的试题页面,点击最下方的“提交”按钮,完成提交。
机试注意事项:(1)机试时间:7月3日-4日,具体请以自己手机收到的时间为准,通知短信会在7月3日前发给大家。
(2)机试地点:西工大老校区软件学院机房(从南门进入,往北走,在第1个路口左拐)。
(3)机试数量:3道,1小时多,不能带书。
(4)携带东西:身份证(凭身份证进入考场),建议大家带上笔和草稿纸,方便分析题目。
切记事项:(1)收到具体机试时间短信的同学才能参加机试,没有收到的不得参加。
(2)只报名机试的同学,务必于今晚12点前注册华为官方简历,没有注册简历的同学将不能参加机试。
PS:华为官方简历注册将于今晚12点截止!(3)严谨替考!一经发现,再无机会进入华为公司。
华为技术招聘笔试答题技巧:如何应对考场压力和时间限制?
华为技术招聘笔试答题技巧:如何应对考场压力和时间限制?2023年,随着技术领域的不断发展和拓展,华为技术公司成为了这些领域中最具有影响力和实力的公司之一。
在这个公司中,技术人才的需求量不断增加,技术笔试成为了评价人才能力和能否胜任工作的一个重要环节。
在这里,我将会和大家分享一些关于华为技术招聘笔试的答题技巧,让大家能够克服考场压力和时间限制,更好地展现自己的能力和实力。
首先,我们需要了解华为技术招聘笔试的基本情况。
华为技术笔试分为数学、英语、编程等多个科目,各个科目在考试时间上都存在着较为严格的要求,考试难度也极高。
因此,在考试前,要充分了解各科目内容,熟悉考试环节和考试要求。
这可以帮助我们对知识点有更深入的理解,提升我们的答题效率和准确性。
其次,在准备笔试过程中,我们需要切实做好时间规划。
笔试时间非常紧张,经常有许多考生因为时间不足而没有能够完全完成所有考试题目,而这也直接影响了他们的成绩。
因此,在考试前,我们需要根据各科目的时间限制,制定出有针对性的时间规划,合理分配好时间。
此外,在答题的过程中,也要时刻注意时间的限制,严格把握答题进度。
再次,在考试中,要克服考场压力。
笔试考试是一个紧张的过程,它要求我们在有限的时间内完成大量的工作。
因此,我们需要学会控制自己的焦虑和紧张感。
这可以通过多练习、多模拟考试,增强我们的信心和应对压力的能力。
在考试过程中,我们还可以通过深呼吸、放松肌肉等方法来减轻紧张感和焦虑感。
最后,在考试中,我们需要注重答题技巧。
笔试考试的目的不仅是考察一个人的知识水平,还要考察他的答题技巧和思维能力。
因此,我们要注重答题技巧的训练和提高,包括加强阅读理解能力、掌握公式和解题方法、注意答题格式等。
同时,我们也要注重细节和精度,减少因为一些小的遗漏而失分的情况。
在总结上述几点考试技巧之后,我们可以得出一个结论:华为技术招聘笔试需要我们在考场压力和时间限制中,掌握好答题技巧和方法,保持良好的心态和状态,才能有更好的表现和成绩。
华为机试HJ50:四则运算
华为机试HJ50:四则运算作者:翟天保Steven版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处题目描述:输入一个表达式(用字符串表示),求这个表达式的值。
保证字符串中的有效字符包括['0’-'9’],'+’,'-’,'*’,'/’,'(’,')’,'[’,']’,'{’,'}’。
且表达式一定合法。
输入描述:输入一个算术表达式输出描述:得到计算结果示例:输入:3+2*{1+2*[-4/(8-6)+7]}输出:25解题思路:这道题如果用Python做挺简单的,但是用C++没有现成的函数调用,只能自己来写四则运算函数了。
Calculation函数完成四则运算,其逻辑大致如下:首先判断式子两端是否有括号,若正好两侧有,则前后缩进,计算内部公式;再判断内部公式中最后出现的计算符(加减和乘除)位置,若有加减则先算加减,然后分别将计算符前后的内容用Calculation计算,依次递归;直到某一层内容不存在计算符,即只有数字内容,用stoi函数将其转换为整型,进行计算,完成。
注意,在上述逻辑中有一个flag,它的意义在于判断是否有多层括号,比如公式为((5+3)),其内部式子为(5+3),在分析其内容时,因为两侧有括号包围,所以am和md都为0,此时如果直接用stoi就会失效,那么就将start和end往里缩进一层,调用Calculation,这样就实现了多层括号的识别。
测试代码:#include <string>#include <vector>#include <iostream>using namespace std;int Calculation(string& exp, int start, int end){// 判断是否有括号,若两端包围则计算内部if ((exp[start] == '(' || exp[start] == '[' || exp[start] == '{') && (exp[end-1] == ')' || exp[end-1] == ']' || exp[end-1] == '}')) {vector<int> vec;for (int i = start; i < end-1; ++i){if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{')vec.push_back(i);else if (exp[i] == ')' || exp[i] == ']' || exp[i] == '}')vec.pop_back();}if (vec.back() == start){++start;--end;}}int layer = 0, am = 0, md = 0;bool flag=false; // 判断是否有内置括号// 标记最后出现的加减乘除号位置(不在括号内)for (int i = start; i < end; ++i){if (exp[i] == '(' || exp[i] == '[' || exp[i] == '{'){++layer;flag=true;}else if (exp[i] == ')' || exp[i] == ']' || exp[i] == '}'){--layer;flag=true;}else if ((exp[i] == '+' || exp[i] == '-') && !layer)am = i;else if ((exp[i] == '*' || exp[i] == '/') && !layer)md = i;}// 若有加减号,则将符号前面的内容和后面的内容相加或减if (am > start) {if (exp[am] == '+')return Calculation(exp, start, am) + Calculation(exp, am+1, end);elsereturn Calculation(exp, start, am) - Calculation(exp, am+1, end);}// 若有乘除号,则将符号前面的内容和后面的内容相乘或者除else if (md > start){if (exp[md] == '*')return Calculation(exp, start, md) * Calculation(exp, md+1, end);elsereturn Calculation(exp, start, md) / Calculation(exp, md+1, end);}// 若没有加减乘除,还要判断下是否有内置括号,比如((5+3)),若有则往里缩进else if(flag){return Calculation(exp, start+1, end-1);}// 若没有加减乘除,也没有内置括号,说明这部分内容是数字elsereturn stoi(exp.substr(start, end-start));}int main() {string str;while (cin >> str){cout << Calculation(str, 0, str.size()) << endl;}}。
华为招聘机试整理5:简单四则运算
华为招聘机试整理5:简单四则运算华为招聘机试整理5:简单四则运算题⽬:简单四则运算问题描写叙述: 输⼊⼀个仅仅包括个位数字的简单四则运算表达式字符串,计算该表达式的值注:1、表达式仅仅含 +, -, 乘, / 四则运算符,不含括号2、表达式数值仅仅包括个位整数(0-9)。
且不会出现0作为除数的情况3、要考虑加减乘除按通常四则运算规定的计算优先级4、除法⽤整数除法。
即仅保留除法运算结果的整数部分。
⽐⽅8/3=2。
输⼊表达式保证⽆0作为除数情况发⽣5、输⼊字符串⼀定是符合题意合法的表达式,当中仅仅包括数字字符和四则运算符字符,除此之外不含其他不论什么字符,不会出现计算溢出情况要求实现函数:int calculate(int len,char expStr)【输⼊】 int len: 字符串长度;char expStr: 表达式字符串;【输出】 ⽆【返回】 计算结果演⽰样例1) 输⼊:char expStr = “1+45-8/3”函数返回:192) 输⼊:char expStr = “8/33”函数返回:6题⽬分析:①这道题输⼊字符串中有可能有五种字符,数字、+、-、*、/。
②这道题还须要注意的是我们要依照运算法则来进⾏计算,所以我们要选择⽤栈来解决这道题算法思路:①⽤字符串数组当做符号+-/的栈;⽤int数组作为数字的栈②⼊栈过程:数字栈:检測假设为数字,我们直接-‘0’放⼊number中。
符号栈:1)+ - :由于它们运算优先级⽐較低,所以我们须要⼊栈出栈检測为+-时候。
我们直接放⼊sign中2)* / :由于运算优先级别⽐較⾼,所以哦我们能够直接运算这⾥须要注意索引,这个时候数字索引应该-1,可是字符串的索引应该加1,之后还须要+1(由于已经运算完了)/须要多注意⼀个地⽅,就是分母不能为0。
为0时候。
直接返回-1;③出栈过程1)⾸先第⼀步我们须要把两个栈的索引都减去12)之后⽤符号索引进⾏for循环。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大师兄教你如何过华为机试宝典1—内功心法大华为这个大数据时代土豪金海量式的招聘又要开始了近期听说大华为的校招机试马上就要开始了,由于华为软件岗位的招聘只有技术面跟机试是与技术有关的内容,所以机试的地位非常重要。
对于机试,除了长期积累的软件基本功以外,还有很多可以短期训练的东西,类似于考试之前的突击,可以迅速提高机试成绩,就像在我西电大杨老师考前最后一堂课一定要去,那个重点就是考点阿。
这篇机试葵花宝典的内容是针对华为软件类上机准备的,如果你认真看了本宝典,如果你是真正通过自己能力考上西电的话,想不过都难。
同样想拿高级题的同学,请移步/land/或者,刷上200道题,机试不想拿满分都难。
对于机试,首先应该调整好自己的心态,不要觉得写程序很难,机试题很难,也不要去考虑,万一机试考到自己不会的内容怎么办,要相信,机试题永远是考察每个人的基础,基础是不会考的很偏的,会有人恰好做过某个题而做出来那个题,但不会有人恰好没做过一个题而做不出来那个题。
机试之前,应该做的准备有:1、买一本《算法竞赛入门经典》,这本书不同于普通的算法或者编程语言的书籍,这本书既讲语言,又讲算法,由浅入深,讲的很好,能看完前几章并且把例题都做会,想通过机试就很简单了2、调整好心态,时刻告诉自己,哪些小错误是自己以前经常犯的,最好用笔记本记录下来,写每道题前再看一遍,如果遇到代码调不出来了,先想想自己是否犯过以前那些错误。
还有就是,看了题目以后,先仔细想清楚细节,在纸上写清楚自己需要用到的变量,以及代码的基本框架,不要急于动手去写代码3、不要惧怕任何一道看起来很难的题目,有不会的就去问身边会的人,让别人给自己讲清楚4、心中默念10遍C++跟C除了多了两个加号其实没有区别,会C就能上手C++5、大量的练习是必要且有效的6、看完这篇宝典,预过机试、必练此功。
在这里推荐一个帖子,是机试归来的学长写的,写的很不错,里面的例题在后面的攻略中也会提及, 就在好网上。
宝典二:常用招式1:机试常用变量类型C\C++常用的变量类型有很多种,想通过机试,掌握好其中的几种就可以,他们分别是int,double, string, char[]int 类型是最常用的整数类型,对于输入类型是整形的变量,使用int来进行定义和读入。
还有一种更大的整形变量是long long,在机试中一般不会涉及到考察,如果考虑到运算的过程中有可能超过int的大小,再考虑使用long long,int最大可以到达2^31级别,long long最大可以到达2^63。
PS:有时机试读入多个整数的时候会是这样的形式5,10中间有一个逗号,在这种情况下,其实读入也是很简单的,可以这么写:scanf(“%d%c%d”,&a,&b,&c);或者是:scanf(“%d”,&a);getchar();scanf(“%d”,&c);有的机试题会说:两个整数之间有若干个空格符或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类型的数字,此时再除一个整数,就没有问题了string类型是遇到字符串类问题应该首选的变量,区别于字符数组char[],string类型是直接将字符数组封装了进去,定义string s相当于定义了一个大小特别长的字符数组。
使用string 的好处是,避免了使用char数组时定义数组长度过小导致越界,同时更加直观的将字符串看做了一个对象。
如果要定义一个string变量,首先得包含string的头文件以及使用C++中的标准命名空间,标准命名空间这个东西,只要记得写上就行,没有任何影响。
#include<iostream> //这一句是c++的头文件,c语言代码一样可以把它包含进来,只要将程序后缀名改成.cpp即可,其他都是一样的。
#include<string.h>using namespace std;在不同的环境下,可能会有不同的头文件包含了string的用法,可能的头文件有cstring,string。
在机试的环境中,一般使用string.h即可。
定义一个string和定义其他变量方式相同:string s;读入和输出string也只需要使用cin>>s;cout<<s;这是比c语言的字符数组要简单了很多的。
需要注意的是,string类型读入的时候与char数组的scanf读入一样,都是遇到空格符或者回车符就停止读入,当做一个完整字符串来处理,因此,使用string处理带空格的字符串是不明智的,其他情况下是都可以的。
string变量包含了很多强大的功能,如:[cpp]view plaincopyprint?1.s[i]; //这么写,返回的就是字符串s第i+1位的字符,返回的类型是char型,其中,s[0]是它的第一位,与字符串相同。
2.s.size(); //返回字符串的长度,返回的长度是l,则s从s[0]到s[l-1]表示的是其每一位的字符。
3.if (s1<s2) //两个string是可以方便的使用大小于符号以及等于号来比较大小的,比较的方式是,从左向右按位进行比较,每一位按照字典序来比较。
如”aaaa”<”abc”<”bcd”,但值得注意的一点是,比较的时候应用变量进行比较,即s1<s2这种,而不能用”aa”<”bb”这样,如果要比较他俩的大小,应这么写:4.s1="aa"; s2="bb";5.if (s1<s2)string类型还有很多强大的功能,但是对于机试来说,会使用以上三种功能就足够了。
char[50],char[100]这种字符数组与string类型很像,只不过他是C语言里面的用法,对于机试,只建议在输入带有空格字符的字符串时使用char数组,使用的方式是:gets(s);在这里,gets函数区别于scanf函数的是,gets函数会直接将一整行读进来,而不会遇到空格就停下来。
常见机试题类型初级题常见的类型无非就是字符串处理类的题目和数字处理类的题目,在这里归结如下:1:字符串处理类字符串所有大写转小写:1.for (int i=0;i<s.size();i++)2. if (s[i]>=’A’ && s[i]<=’Z’)3. s[i]=s[i]-’A’+’a’;//s[i]-’A’返回的是两个大写字母之间的差值,比如’C’与’A’的差值是2,这个差值是一个int 类型,也可以直接提取出来使用。
给这个差值再加上字母’a’,相当于给’a’再往后推移二位,变成字母’c’。
这种用法是字符串内最普遍的一种用法,小写转大写也是一样。
删除满足指定要求的字符后输出:在机试中,判定对错的方式是比较输出的结果,而非检查内部的结果,因此,“删除”对于机试来说,相当于“不输出”,也就是说,不需要调用s.erase()函数,只需要在遇到被删除的字符时,跳过,不输出即可。
1.for (int i=0;i<s.size();i++)2.{3. if (s[i]满足删除要求) 跳过;4. else 输出s[i];5.}倒转字符串:与删除字符串的思路类似,倒转一个字符串,其实就是倒着输出,只需要将循环反过来就可以。
1.for (int i=s.size()-1;i>=0;i--)字符串比较大小:如果比较的规则与字符串的比较规则相同,则直接使用s1>s2这种方式,如果规则不同,则用一重循环按位比较即可。
2、数字处理类数字处理类的题目,最常见的两种考察形式是整数拆分、进制转换和排序。
整数拆分是指将一个整数拆分开每一位,比如123拆分成1,2,3。
整数拆分的思路有两种,第一种是直接用字符串读入,然后把每一位用字符的形式提取出来:[cpp]view plaincopyprint?1.for (int i=0;i<s.size();i++)2.<span style="white-space:pre"> </span>num[i]=s[i]-'0';还有一种思路是不断去除以10,把余数提取出来,方法是:[cpp]view plaincopyprint?1.while (n!=0)2.{3.<span style="white-space:pre"> </span>num[i]=n%10;4.<span style="white-space:pre"> </span>n=n/10;5.<span style="white-space:pre"> </span>i++;6.}进制转换:进制转换又分为10进制转换成别的进制以及别的进制转换成10进制,进制转换其实特别简单,只需要记住如下代码:10进制转换成X进制[cpp]view plaincopyprint?1.while (n!=0)2.{3.<span style="white-space:pre"> </span>num[i]=n%x;4.<span style="white-space:pre"> </span>i++;5.<span style="white-space:pre"> </span>n=n/x;6.}X进制转换成10进制[cpp]view plaincopyprint?1.for (int i=0;i<=length;i++)2.{3.ans=ans*x+num[i];4.}其中,num[i]表示的是该x进制数的每一位,比如一个二进制数101,用这种转换方式去转换,ans的值从i=0到i=2处理后分别是1,2,5。
排序:排序这个东西,其实不需要学习冒泡啊、快排啊之类的算法,应对机试,C++中自带的sort函数就可以很好的解决,请看下面一段代码[cpp]view plaincopyprint?1.</pre><pre name="code" class="cpp">#include<iostream>2.#include<algorithm> //这个是包含sort函数的头文件ing namespace std;4.int arr[100],n;5.int cmp(int x,int y) //这个函数是sort函数比较两个元素优先级的函数,在这里计算出两个元素的优先级,然后返回即可。