华为机试题汇总作者_第1页
华为机试题汇总作者_第2页
华为机试题汇总作者_第3页
华为机试题汇总作者_第4页
华为机试题汇总作者_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2016校招 华为提前批机试(2015年8月13日上午)今年的华为机试跟以往的有所不同,以往机试题侧重于字符串处理,分数权重为:60、100、160。今年貌似改革了,题目都偏向数学逻辑类。华为的名言“胜则举杯相庆,败则拼死相救”说话的人来头不小:任正非,顺带说了很欣赏华为的狼性文化,团队精神。1、猴子吃桃题目描述:猴子第一天摘下若干个桃子,当即吃了一半还不过瘾,又多吃了一个。第二天早上有奖剩下的桃子吃掉一般,又多吃了一个。以后每天早上都吃了前一天剩下的一般零一个。到第m天早上再吃时,只剩下一个桃子。求第一天共摘了多少?输入:mwield天数,即第m早上再想吃时,只剩下一个桃子。输出:第一天共摘

2、了多少个桃子。样例输入:2样例输出:4 答题思路:从第m天推起,第m天为1个;第m-1天为(1+1)*2个;第m-2天为以此反推,for循环就可以搞定。 2、海滩上有多少个桃子题目描述:海滩上有一堆桃子,只猴子来分。第一只猴子把这堆桃平均分为m份,多了一个,把多的一个扔到海里,拿走了一份。第二只猴子把剩下的桃子又平均分为m份,多了一个,丢入海里,拿走了一份第三第四第m只猴字都这样操作,请问海滩上原来最少有多少个桃子?输入:猴子个数m(3<=m<=9)输出:原来最少有多少个桃子样例输入:3样例输出:25 答题思路:楼主是暴力求解的,所以效率比较低,i从第

3、1开始,认为最后剩i个,再网上推算,能否被m整除(最后有一个测试用例没过,仔细想来应该是m=9时,溢出了,因为楼主是先乘后除的,所以问题应该出在这,以后牢记经验了)。回来后,差了一下猴子分桃这个经典案例,这位大神博客中有写得比较详细和巧妙:经验教训:要注意大数问题,像这种情况,long long比较保险一点,另外,做乘除时,能先除的先除,乘放在后面,避免溢出问题! 2、自动售货系统题目太长了,直接上图好了 答题思路:题目很长,但不算难,捋顺了逻辑就好了。楼主后面也有一个测试用例没过,真是伤感。猜测了一下,应该是当输入太长了,自动换行时没有读全经验教训:以后做题时一定要好好考

4、虑边界、异常等比较全面的测试用例!华为机试题汇总作者: 刘鹏举写在前面的话:由于最近准备华为机试,所以在网上找了一些资料,所以以下内容均摘自互联网,现整理一下以供各位找工作的战友参考。肯定不会遇到原题,就当练练手了。第一题:数组比较: 问题描述: 比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数比如:数组1,3,5和数组77,21,1,3,5按题述要求比较,不相等元素个数为0数组1,3,5和数组77,21,1,3,5,7按题述要求比较,不相等元素个数

5、为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)

6、0;输入: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函数返回:第二题:约瑟夫环(学软件的

7、这个都应该知道) 问题描述: 输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数第二轮计数出列数字为3,计

8、数值更新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

9、 m:初始计数值【输出】 int output_array:输出的数值出列顺序【返回】 无 示例 输入:int input_array = 3,1,2,4,int len = 4, m=7输出:output_array = 2,3,1,4第三题:四则运算: 问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注: 1、表达式只含 +, -, *, /&

10、#160;四则运算符,不含括号2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况3、要考虑加减乘除按通常四则运算规定的计算优先级4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况 要求实现函数: int calculate(int len,char *expStr)【输入】 int len: 字符串长度;char *

11、expStr: 表达式字符串;【输出】 无【返回】 计算结果 示例 1) 输入:char *expStr = “1+4*5-8/3”函数返回:192) 输入:char *expStr = “8/3*3”函数返回:6 :第四题:       单链表逆序(这个大家都懂得)第五题:编写函数string deletestring(string str,string sub_str)从str中查找匹配的字符

12、串sub_str,采用最左匹配,且输出形式为str+"_"+匹配的次数:第六题:高精度数相加,string addBigInt(string num1,string num2)需考虑正负数相加第七题:比较一个数组的元素 是否为回文数组第八题:求两个整形数组的异集,接A+B-(A与B的交集)第九题:一副牌中发五张扑克牌给你:让你判断数字的组成:有以下几种情况:1:四条:即四张一样数值的牌(牌均不论花色)2:三条带一对3:三条带两张不相同数值的牌4:两对5:顺子  包括 10,J,Q,K,A6:什么都不是7:只有一对 第十题:手

13、机号码合法性判断(20分)问题描述:我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下: 1、  长度13位;2、  以86的国家码打头;3、  手机号码的每一位都是数字。 请实现手机号码合法性判断的函数要求:1)  如果手机号码合法,返回0;2)  如果手机号码长度不合法,返回13)  如果手机号码中包含非数字的字符,返回2;4)  如果手机号码不是以86打头的,返回3;【注】除成功的情况

14、外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。要求实现函数:int s int verifyMsisdn(char* inMsisdn)【输入】 char* inMsisdn,表示输入的手机号码字符串。【输出】  无【返回】  判断的结果,类型为int。示例输入:  inMsisdn = “869123456789“输出:  无返回:  1输入:&#

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

16、写的元音字母在后,依次有序)。说明:1、  元音字母是a,e,i,o,u,A,E,I,O,U。2、  筛选出来的元音字母,不需要剔重; 最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。 要求实现函数:void sortVowel (char* input, char* output);【输入】  char* input,表示输入的字符串【输出】  char* output,排好序之后的元音字符串。【返回

17、】  无 示例输入:char *input = “Abort!May Be Some Errors In Out System. “输出:char *output =“aeeeooAEIO “第十二题:身份证号码合法性判断问题描述:我国公民的身份证号码特点如下: 1、     长度为18位;2、     第117位只能为数字;3

18、、     第18位可以是数字或者小写英文字母x。4、     身份证号码的第714位表示持有人生日的年、月、日信息。 例如:511002 19880808 0111或511002 19880808011x。 请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。年份大于等于1900年,小于等于2100年。需要考虑闰年、大小月的情况。所谓闰年,能被4整除且不能被100整除 或 能被400

19、整除的年份,闰年的2月份为29天,非闰年的2月份为28天。其他情况的合法性校验,考生不用考虑。函数返回值:1)  如果身份证号合法,返回0;2)  如果身份证号长度不合法,返回1;3)  如果身份证号第117位含有非数字的字符,返回2;4)  如果身份证号第18位既不是数字也不是英文小写字母x,返回3;5)  如果身份证号的年信息非法,返回4;6)  如果身份证号的月信息非法,返回5;7)  如果身份证号的日信息非法,返回6(请注意闰年的情况);【注】除成

20、功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。要求实现函数:int verifyIDCard(char* input)示例1) 输入:”511002 111222”,函数返回值:1;2) 输入:”511002 abc123456789”,函数返回值:2;3) 输入:”511002 19880808123a”,函数返回值:3;4) 输入:”511002 188808081234”,函数返回值:4;5) 输入:”5

21、11002 198813081234”,函数返回值:5;6) 输入:”511002 198808321234”,函数返回值:6;7) 输入:”511002 1989 0229 1234”,函数返回值:7;8) 输入:”511002 198808081234”,函数返回值:0;第十三题:选秀节目打分,分为专家评委和大众评委,score 数组里面存储每个评委打的分数,judge_type 里存储与 score 数组对应的评委类别,judge_type =

22、60;1,表示专家评委,judge_type = 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分  * 0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。函数接口   int cal_score(int score, int 

23、judge_type, int n) 第十四题:给定一个数组input ,如果数组长度n为奇数,则将数组中最大的元素放到 output 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。例如:input = 3, 6, 1, 9, 7   output = 3

24、, 7, 9, 6, 1; input = 3, 6, 1, 9, 7, 8    output = 1, 6, 8, 9, 7, 3函数接口   void sort(int input, int n, int output)第十五题:操作系统任务调度问题。操作系统任务分为系统任

25、务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task,长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task 中的任务按照系统任务、用户任务依次存放到 system_task 数组和 user_task 数组中(数组中元素的值是任务在task 数组中的下标),并且优先级高的任务排在前面,数组

26、元素为-1表示结束。例如:task = 0, 30, 155, 1, 80, 300, 170, 40, 99    system_task = 0, 3, 1, 7, -1    user_task = 4, 8, 2, 6, -1函数接口    void&

27、#160;scheduler(int task, int n, int system_task, int user_task) 2015届华为校园招聘机试题分类: 面试珠玑2014-09-13 18:25 19022人阅读 评论(26) 收藏 举报华为机试第一题(60分):       按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123

28、456789”,则输出为“abc00000”,“12345678“,”90000000”cpp view plaincopy1. 转载请标明出处,原文地址:2. #include<iostream>  3. #include<cstdio>  4. using namespace std;  5.   6. void solve(char *str , int n , int len

29、)  7.   8.     int i , j , k , quotient , remainder;  9.     quotient = len / n;              &

30、#160; /原字符串被分解的个数  10.     remainder = len - n * quotient;    /剩余的字符串的个数  11.   12.     for(i = 0  i < len  i += n) &

31、#160;13.       14.         if(len - i < n)  15.           16.              k 

32、= n - len + i;  17.              for(j = i  j < len  +j)  18.               &

33、#160;  printf("%c" , strj);  19.              for(j = 0  j < k  +j)  20.            

34、60;     putchar('0');  21.           22.         else  23.           24.      

35、0;      for(j = i  j < i + n  +j)  25.                 printf("%c" , strj);  26.   

36、0;       27.         putchar(' ');  28.       29.     printf("n");  30.   31.   32. int main(void) 

37、60;33.   34.     int i , m , n , len;  35.     char str1000;  36.   37.     while(scanf("%d %d", &m , &n) != EOF

38、)  38.       39.         for(i = 0  i < m  +i)  40.           41.         

39、60;   scanf("%s" , str);  42.             len = strlen(str);  43.             solve(str , n , l

40、en);  44.           45.       46.     return 0;  47.   第一题:拼音转数字输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:描述:      拼音        yi  er &#

41、160;san  si  wu  liu  qi  ba  jiu      阿拉伯数字        1   2   3      4   5    6    7   8   9输入字符只包含小写字母,所有字符都可以正好匹配运行时间限制:无限制内存限制:       无限制输入:     

42、0;        一行字符串,长度小于1000输出:              一行字符(数字)串样例输入:       yiersansi样例输出:       1234cpp view plaincopy1. 转载请标明出处,原文地址:2. #include<iostream>  3. #include<cstdio>  4. using 

43、;namespace std;  5.   6. void solve(char *str , int len)  7.   8.     int i;  9.   10.     for(i = 0  i < len  ) 

44、0;11.       12.         switch(stri)  13.           14.         case 'y':  15.     

45、0;       putchar('1');  16.             i += 2;  17.             break;  18.    &#

46、160;    case 'e':  19.             putchar('2');  20.             i += 2;  21.    &#

47、160;        break;  22.         case 's':  23.             if(stri + 1 = 'a')  24.  

48、             25.                 putchar('3');  26.               &

49、#160; i += 3;  27.               28.             else  29.             

50、0; 30.                 putchar('4');  31.                 i += 2;  32.     &#

51、160;         33.             break;  34.         case 'w':  35.          

52、0;  putchar('5');  36.             i += 2;  37.             break;  38.         ca

53、se 'l':  39.             putchar('6');  40.             i += 3;  41.         &#

54、160;   break;  42.         case 'q':  43.             putchar('7');  44.           &

55、#160; i += 2;  45.             break;  46.         case 'b':  47.             putc

56、har('8');  48.             i += 2;  49.             break;  50.         case 'j'

57、;:  51.             putchar('9');  52.             i += 3;  53.            &#

58、160;break;  54.           55.       56.     printf("n");  57.   58.   59. int main(void)  60.   61.     i

59、nt len;  62.     char str1000;  63.   64.     while(scanf("%s" , str) != EOF)  65.       66.         len 

60、= strlen(str);  67.         solve(str , len);  68.       69.     return 0;  70.   第二题:去除重复字符并排序运行时间限制:无限制内容限制:       无限制输入:   

61、0;          字符串输出:              去除重复字符并排序的字符串样例输入:       aabcdefff样例输出:       abcdefcpp view plaincopy1. 转载请标明出处,原文地址:2. #include<iostream>  3. #include<cstdio>  4. #include

62、<memory>  5. using namespace std;  6.   7. void solve(char *str , int len)  8.   9.     int i , hash256;  10.     memset(hash , 0 

63、;, sizeof(hash);  11.   12.     for(i = 0  i < len  +i)  13.       14.         if(0 = hashstri)  15.   

64、;          hashstri = 1;  16.       17.     for(i = 0  i < 256  +i)  18.       19.   &#

65、160;     if(0 != hashi)  20.             putchar(i);  21.       22.     printf("n");  23.   24.  

66、60;25. int main(void)  26.   27.     int len;  28.     char str1000;  29.   30.     while(scanf("%s" , str) != EOF)  31.   &#

67、160;   32.         len = strlen(str);  33.         solve(str , len);  34.       35.     return 0;  3

68、6.   第三题:等式变换输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。1 2 3 4 5 6 7 8 9 = X比如:12-34+5-67+89 = 51+23+4-5+6-7-8-9 = 5请编写程序,统计满足输入整数的所有整数个数。输入:       正整数,等式右边的数字输出:       使该等式成立的个数样例输入:5样例输出:21cpp view plaincopy1. 转载请标明出处,原文地址:2. #include<iostream> &

69、#160;3. #include<cstdio>  4. using namespace std;  5.   6. int ops21;  7. const char sym3 = '+' , '-' , ' '  8. int result , num;  9. &

70、#160; 10. void dfs(int layer, int currentResult, int lastOp, int lastSum)  11.   12.     lastSum *= (layer > 9) ? 100 : 10;  13.     lastSum&#

71、160;+= layer;  14.     if(layer = 9)  15.       16.         currentResult += (lastOp) ? (-1 * lastSum) : lastSum;  17.  

72、       if(currentResult = result)  18.           19.             +num;  20.         &

73、#160;   printf("1");  21.             for(int i = 2  i <= 9  +i)  22.              

74、; 23.                 if(symopsi-1 != ' ')  24.                     printf("&

75、#160;%c ", symopsi-1);  25.                 printf("%d", i);  26.               27.   

76、0;         printf(" = %dn" , result);  28.           29.         return;  30.       3

77、1.     opslayer = 2;  32.     dfs(layer + 1 , currentResult , lastOp , lastSum);   /Continue  33.     currentResult += (lastOp)? (-1 *&

78、#160;lastSum) : lastSum;  34.     opslayer = 0;  35.     dfs(layer + 1 , currentResult , 0 , 0);  /Plus  36.     opslayer = 1;

79、0; 37.     dfs(layer + 1 , currentResult , 1 , 0);  /Minus  38.   39.   40. int main(void)  41.   42.     while(scanf("%d", &result

80、) != EOF)  43.       44.         num = 0;  45.         dfs(1 , 0 , 0 , 0);  46.      

81、   printf("%dn" , num);  47.       48.     return 0;  49.    华为2016校招机试题分类: C/C+ 算法 C/C+笔试题目2015-09-05 23:02 62人阅读 评论(1) 收藏 举报目录(?)+题目一:根据指定

82、的分隔符分隔字符串,并输出指定的段描述根据指定的分隔符分隔字符串,并输出指定的段。如果指定的段超过分隔的段数,输出:NULL举例: AAA?BBB?CCC?2 字符串为:AAA?BBB?CCC? 分隔符为:? 指定的段为:2 字符串分割为:AAA BBB CCC共三段,第2段字符串为:BBB输入输出格式要求输入分隔字符串长度小于128个字符,指定的段是一个正整数。样例输入:AAA?BBB?CCC?2 输出:BBBcpp view plaincopy1. #include <iostream> 

83、 2. #include <Windows.h>  3. using namespace std;  4.   5. void spliteStr()  6.   7.     char str100;  8.     cin>>str;  9.     

84、char* strTmp = str;  10.     char *strStart = strchr(strTmp, '?');  11.     strStart+;  12.     char *strEnd = strchr(strStart, '?'); 

85、 13.     int len = strEnd - strStart;  14.     while(len != 0)  15.         cout<<*strStart;  16.        

86、0;strStart+;  17.         len-;  18.       19.     cout<<endl;  20.   21.   22. int main()  23.   24.     spl

87、iteStr();  25.     system("pause");  26.     return 0;  27.   题目二:输入若干整数,输出其中能被这些整数中其他元素整除的那些元素描述输入一组大于0小于1000的整数,且均不相同,逗号隔开,输出其中能被这些整数中其他元素整除的那些元素。输入输出格式要求输入要求同上述描述,输出要求整数顺序按照输入时的顺序输出。样例输入:2,4,6,8,10,12,3

88、,9 输出:4,6,8,10,12,9cpp view plaincopy1. #include <iostream>  2. using namespace std;  3.   4. int main()  5.   6.     int a100,b100,tempIn,i,k;  7.     char

89、60;c = '0'  8.     i = 0;  9.     while(c != 'n')  10.         scanf("%d",&tempIn);  11.      &

90、#160;  ai = tempIn;  12.         i+;  13.         scanf("%c",&c);  14.       15.     i-;  16. &#

91、160;   k = 0;  17.     while(i > 0)  18.         for(int j = 0; j < i; j+)  19.          

92、   if(ai % aj = 0)  20.                 bk = ai;  21.                 k+;&#

93、160; 22.                 break;  23.               24.           25.   

94、0;     i-;  26.       27.     for(int j = k-1; j >= 0; j-)  28.         cout<<bj;  29.     

95、    if(j != 0)  30.             cout<<","  31.       32.     cout<<endl;  33.     system

96、("pause");  34.     return 0;  35.   题目三:大数求余描述输入两个超长整型构成的字符串,使用空格隔开,求前者除以后者的余数。输入输出格式要求输入的每个字符串最大长度为100个字符,输出为余数值,如果结果异常输出NULL样例输入:123456789 23456789 输出:6172844cpp view plaincopy1. #include <iostream>  2

97、. using namespace std;  3.   4. char *aModb(char *a, char *b)  5.   6.     int lenb = strlen(b);  7.     int lena,i,j,k,temp,temp2;  8.     char *t = a;  9.     while(lena = strlen(a) >&#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论