华为机试题汇总作者

  • 格式:doc
  • 大小:360.75 KB
  • 文档页数:21

2016校招华为提前批机试(2015年8月13日上午)今年的华为机试跟以往的有所不同,以往机试题侧重于字符串处理,分数权重为:60、100、160。

今年貌似改革了,题目都偏向数学逻辑类。

华为的名言“胜则举杯相庆,败则拼死相救”说话的人来头不小:任正非,顺带说了很欣赏华为的狼性文化,团队精神。

1、猴子吃桃题目描述:猴子第一天摘下若干个桃子,当即吃了一半还不过瘾,又多吃了一个。

第二天早上有奖剩下的桃子吃掉一般,又多吃了一个。

以后每天早上都吃了前一天剩下的一般零一个。

到第m天早上再吃时,只剩下一个桃子。

求第一天共摘了多少?输入:mwield天数,即第m早上再想吃时,只剩下一个桃子。

输出:第一天共摘了多少个桃子。

样例输入:2样例输出:4答题思路:从第m天推起,第m天为1个;第m-1天为(1+1)*2个;第m-2天为……以此反推,for循环就可以搞定。

2、海滩上有多少个桃子题目描述:海滩上有一堆桃子,只猴子来分。

第一只猴子把这堆桃平均分为m份,多了一个,把多的一个扔到海里,拿走了一份。

第二只猴子把剩下的桃子又平均分为m份,多了一个,丢入海里,拿走了一份……第三第四……第m只猴字都这样操作,请问海滩上原来最少有多少个桃子?输入:猴子个数m(3<=m<=9)输出:原来最少有多少个桃子样例输入:3样例输出:25答题思路:楼主是暴力求解的,所以效率比较低,i从第1开始,认为最后剩i个,再网上推算,能否被m整除……(最后有一个测试用例没过,仔细想来应该是m=9时,溢出了,因为楼主是先乘后除的,所以问题应该出在这,以后牢记经验了)。

回来后,差了一下猴子分桃这个经典案例,这位大神博客中有写得比较详细和巧妙:/hackbuteer1/article/details/6914395经验教训:要注意大数问题,像这种情况,long long比较保险一点,另外,做乘除时,能先除的先除,乘放在后面,避免溢出问题!!!!!2、自动售货系统题目太长了,直接上图好了答题思路:题目很长,但不算难,捋顺了逻辑就好了。

楼主后面也有一个测试用例没过,真是伤感。

猜测了一下,应该是当输入太长了,自动换行时没有读全……经验教训:以后做题时一定要好好考虑边界、异常等比较全面的测试用例!!!!华为机试题汇总作者:刘鹏举写在前面的话:由于最近准备华为机试,所以在网上找了一些资料,所以以下内容均摘自互联网,现整理一下以供各位找工作的战友参考。

肯定不会遇到原题,就当练练手了。

第一题:数组比较:•问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。

请编程实现上述比较,并返回比较中发现的不相等元素的个数比如:数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3•要求实现函数:int array_compare(int len1, int array1[], int len2, int array2[])【输入】 int len1:输入被比较数组1的元素个数;int array1[]:输入被比较数组1;int len2:输入被比较数组2的元素个数;int array2[]:输入被比较数组2;【输出】无【返回】不相等元素的个数,类型为int•示例1)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5 函数返回:02)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6 函数返回:3第二题:约瑟夫环(学软件的这个都应该知道)•问题描述:输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。

从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。

如果计数到达数列尾段,则返回数列首位置继续计数。

请编程实现上述计数过程,同时输出数值出列的顺序比如:输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数最后一轮计数出列数字为4,计数过程完成。

输出数值出列顺序为:2,3,1,4。

•要求实现函数:void array_iterate(int len, int input_array[], int m, int output_array[])【输入】 int len:输入数列的长度;int intput_array[]:输入的初始数列int m:初始计数值【输出】 int output_array[]:输出的数值出列顺序【返回】无•示例输入:int input_array[] = {3,1,2,4},int len = 4, m=7输出:output_array[] = {2,3,1,4}第三题:四则运算:•问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注: 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+4*5-8/3”函数返回:192)输入:char *expStr = “8/3*3”函数返回:6 :第四题:单链表逆序(这个大家都懂得)第五题:编写函数string deletestring(string str,string sub_str)从str中查找匹配的字符串s ub_str,采用最左匹配,且输出形式为str+"_"+匹配的次数:第六题:高精度数相加,string addBigInt(string num1,string num2)需考虑正负数相加第七题:比较一个数组的元素是否为回文数组第八题:求两个整形数组的异集,接A+B-(A与B的交集)第九题:一副牌中发五张扑克牌给你:让你判断数字的组成:有以下几种情况:1:四条:即四张一样数值的牌(牌均不论花色)2:三条带一对3:三条带两张不相同数值的牌4:两对5:顺子包括 10,J,Q,K,A6:什么都不是7:只有一对第十题:手机号码合法性判断(20分)问题描述:我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。

特点如下:1、长度13位;2、以86的国家码打头;3、手机号码的每一位都是数字。

请实现手机号码合法性判断的函数要求:1)如果手机号码合法,返回0;2)如果手机号码长度不合法,返回13)如果手机号码中包含非数字的字符,返回2;4)如果手机号码不是以86打头的,返回3;【注】除成功的情况外,以上其他合法性判断的优先级依次降低。

也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。

要求实现函数:int s int verifyMsisdn(char* inMsisdn)【输入】 char* inMsisdn,表示输入的手机号码字符串。

【输出】无【返回】判断的结果,类型为int。

示例输入: inMsisdn = “869123456789“输出:无返回: 1输入: inMsisdn = “88139123456789“输出:无返回: 3输入: inMsisdn = “86139123456789“输出:无返回: 0第十一题:将一个字符串的元音字母复制到另一个字符串,并排序(30分)问题描述:有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。

说明:1、元音字母是a,e,i,o,u,A,E,I,O,U。

2、筛选出来的元音字母,不需要剔重;最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。

要求实现函数:void sortVowel (char* input, char* output);【输入】 char* input,表示输入的字符串【输出】 char* output,排好序之后的元音字符串。

【返回】无示例输入:char *input = “Abort!May Be Some Errors In Out System. “输出:char *output =“aeeeooAEIO“第十二题:身份证号码合法性判断问题描述:我国公民的身份证号码特点如下:1、长度为18位;2、第1~17位只能为数字;3、第18位可以是数字或者小写英文字母x。

4、身份证号码的第7~14位表示持有人生日的年、月、日信息。

例如:511002 19880808 0111或511002 198********x。

请实现身份证号码合法性判断的函数。

除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。

年份大于等于1900年,小于等于2100年。

需要考虑闰年、大小月的情况。

所谓闰年,能被4整除且不能被100整除或能被400整除的年份,闰年的2月份为2 9天,非闰年的2月份为28天。

其他情况的合法性校验,考生不用考虑。

函数返回值:1)如果身份证号合法,返回0;2)如果身份证号长度不合法,返回1;3)如果身份证号第1~17位含有非数字的字符,返回2;4)如果身份证号第18位既不是数字也不是英文小写字母x,返回3;5)如果身份证号的年信息非法,返回4;6)如果身份证号的月信息非法,返回5;7)如果身份证号的日信息非法,返回6(请注意闰年的情况);【注】除成功的情况外,以上其他合法性判断的优先级依次降低。