华为2012校园招聘软件上机笔试题+准确答案

合集下载

华为校园招聘软件研发上机测试题及部分解答+

华为校园招聘软件研发上机测试题及部分解答+

以下是收集到的两套题(没有添加答案),上机测试只有应聘软件研发的才会碰到。

有的写了点自己的解法,如果大家有好的想法欢迎讨论!大家一起学习嘛!以下是上机考试的一些注意事项:(1)考试时长为2个小时,总共有3个题(去年是2个题,难度要比今年大些),编译环境为VC 6.0(C语言)/ Eclipse(Java);(2)3个题目中大致第一个题是最简单的,第三个题是最难的;(3)从服务器上下载题目下来后最好能把工程保存到在电脑重启后不会自动还原的磁盘分区下面,这样不致由于各种意外因素电脑重启过后编的程序不会消失;(4)不要改动所给函数的原型,可以自己添加函数。

另外,华为提供的工程是将Main函数隐藏了的,所以自己不用再添加Main函数。

试题1:2011.9.6 转载自:/liuqiqi677/article/details/67554981、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。

打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分= 专家评委平均分* 0.6 + 大众评委* 0.4,总分取整。

如果没有大众评委,则总分= 专家评委平均分,总分取整。

函数最终返回选手得分。

函数接口int cal_score(int score[], int judge_type[], int n)(这个问题很简单,应该只是涉及了下double/int转换)2、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

届华为校园招聘上机考试题

届华为校园招聘上机考试题

2012届华为校园招聘上机考试题目(9月6日下午1点场)分类:华为准备2011-09-08 15:10 281人阅读评论(0) 收藏举报在网上看到华为在有的地方已经开始机试了,于是决定自己先编着试试。

下面是题目和自己写的代码。

1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。

打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分= 专家评委平均分* 0.6 + 大众评委* 0.4,总分取整。

如果没有大众评委,则总分= 专家评委平均分,总分取整。

函数最终返回选手得分。

函数接口int cal_score(int score[], int judge_type[], int n)view plaincopy to clipboardprint?1. #include<stdio.h>2. #include<string.h>3. #include<iostream.h>4. #include<conio.h>5. #define N 56.7. i nt cal_score(int score[], int judge_type[], int n)8.9. {10. int expert=0;11. int dazhong=0;12. int zongfen=0;13. int i;14. int number=0;15.16. for(i=0;i<N;i++)17. {18. if(judge_type[i]==1)19. {20. expert=expert+score[i];21. number++;22. }23. else dazhong=dazhong+score[i];24. }25. if(number==N)26. {27. zongfen=(int)(expert/N);28. }29. else30.31. {32. expert=(int)(expert/number);33. dazhong=(int)(dazhong/(N-number));34. zongfen=int(0.6*expert+0.4*dazhong);35.36. }37. return zongfen;38.39. }40. int main()41. {42. int score[N];43. int judge_type[N];44. int numberlast=0;45. int i;46. printf("please input the %d score:\n",N);47. for(i=0;i<N;i++)48. scanf("%d",&score[i]);49. printf("please input the level(1:expert,2:dazhong)\n");50. for(i=0;i<N;i++)51. scanf("%d",&judge_type[i]);52. numberlast=cal_score(score,judge_type,N);53. printf("the last score is %d\n",numberlast);54. return 0;55. }运行结果分析:please input the 5 score:90 80 87 89 91please input the level(1:expert,2:dazhong)1 2 1 1 1the last score is 852、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

2012最新最全华为校园招聘软件研发笔试题(2)

2012最新最全华为校园招聘软件研发笔试题(2)

2012最新最全华为校园招聘软件研发笔试题(2)m=p- //printf( %5d ,m); output_array[j++]=m; s=p; q- next=p- next; p=p- next; free(s); s=NULL; } m=p- // printf( %5d\n ,m); output_array[j]=p- k=j; for(j=0 ; j j++) { printf( %5d ,output_array[j]); } }int main() { int input_array[]={3,1,2,4}; int len=4; int m=7; int output_array[4]; array_iterate(len, input_array, m); }8、简单四则运算问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注: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#include #include using namespace std;int calculate(int len,char *expStr) { struct { char opdata[200];int top; }opstack; //定义操作符栈opstack.top = -1; int i=0;//遍历字符串的下标int t=0;//当前后缀表达式的长度char ch = expStr[i]; while (ch!= \0 ){ switch (ch) { case + : case - : while (opstack.top != -1) { expStr[t] = opstack.opdata[opstack.top]; opstack.top--; t++; } opstack.top++; opstack.opdata[opstack.top] = ch; break; case * : case / : while (opstack.top != -1 (opstack.opdata[opstack.top] == * || opstack.opdata[opstack.top] == / ) ) { expStr[t] = opstack.opdata[opstack.top]; opstack.top--; t++; } opstack.top++; opstack.opdata[opstack.top] = ch; break; default: expStr[t] = ch; t++; break; } i++; ch = expStr[i]; } while (opstack.top != -1)//将栈中所有的剩余的运算符出栈{ expStr[t] = opstack.opdata[opstack.top]; opstack.top--; t++; } expStr[t]= \0 struct { int numeric[200]; int top; }data; data.top = -1; i=0; ch = expStr[i]; while (ch!= \0 ) { if (ch = 0 ch = 9 ){ data.top++; data.numeric[data.top] = ch- 0 } else if( + == ch) { int tmp = data.numeric[data.top-1] + data.numeric[data.top]; data.top--; data.numeric[data.top] = tmp; }else if( - == ch) { int tmp = data.numeric[data.top-1] - data.numeric[data.top]; data.top--; data.numeric[data.top] = tmp; } else if( * == ch) { int tmp = data.numeric[data.top-1] * data.numeric[data.top]; data.top--; data.numeric[data.top] = tmp; } else if( / == ch) { if(data.numeric[data.top] == 0) { printf( cannot be zero of the divide\n exit(1); } int tmp = data.numeric[data.top-1] / data.numeric[data.top]; data.top--; data.numeric[data.top] = tmp; } i++; ch = expStr[i]; } return data.numeric[data.top]; }void main() { char expStr[] = 9/3*5 printf( %s\n ,expStr); int result = calculate(strlen(expStr),expStr); printf( %d\n ,result); }9、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。

2012最新最全华为校园招聘软件研发笔试题(3)

2012最新最全华为校园招聘软件研发笔试题(3)

2012最新最全华为校园招聘软件研发笔试题(3)output[med-i]=input[n-1-k];output[med+i]=input[n-2-k]; k=k+2; } } else { for(i=0;iint main() { int a[6]={3,6,1,9,7,8}; int b[6]={0}; for(int i=0;i i++) printf( %2d ,a[i]); printf( \n sort(a,6,b); return 0; }11、操作系统任务调度问题。

操作系统任务分为系统任务和用户任务两种。

其中,系统任务的优先级50,用户任务的优先级= 50且= 255。

优先级大于255的为非法任务,应予以剔除。

现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。

函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到system_task[] 数组和user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-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 scheduler(int task[], int n, int system_task[], int user_task[]) #include #include #include #includevoid scheduler1(int task[], int n, int system_task[], int user_task[]) { int i; int j=0; int *p,*pp,*p_user,*pp_user; int index=0; int count,count2; int min=0; int k=0; p=(int*)malloc(sizeof(int)*n); for(i=0;ipp=(int*)malloc(sizeof(int)*n); for(i=0;ipp[count]=-1; for(i=0;ifor(i=0;iStrReplace(s,s1,s2); printf( %s\n ,s); }void StrReplace(char* strSrc, char* strFind, char* min=user_task[0]; for(j=1;jpp_user[count2]=-1; for(i=0;iint main() { int task[9]={0, 30, 155, 1, 80, 300,170, 40, 99}; int system_task[9]={0}; int user_task[9]={0}; scheduler1(task,9,system_task,user_task); return 0; }13、输入一个字符串,用指针求出字符串的长度。

华为上机题详解

华为上机题详解

今天参加了HW的上级考试,上机考试总共有三道题目,我觉得都是对基本功的考察,所以说基本知识的掌握非常重要,特别是动手写程序的能力,我回来的时候对我的同学说,如果在本科阶段没有自己动手写过上万行的C/C++程序,要想把今天的上机考试题全部做对几乎是不可能的,这只是我个人的感觉,在平时的学习过程中,一定要自己动手去写程序,不要随便拷贝一些程序,否则后悔就来不及了。

第一题是素数的判断,给定一个数字判断是不是素数,这个就非常简单了,假设给定数字是n,从2到n-1去判断有没有数可以被n整除,如果有的话就说明该数不是素数,如果没有就说明该数是素数。

第二题是给定一个整数,把该整数对应的二进制01串转置后输出转置后01串对应的整数,如2的二进制表示为00000010,转置后为01000000,对应的值为64,这里主要考察的是移位操作和或运算,假设给定的数字是n,先把判断n和2取模的结果是否为0,为0说明当前最后一位是0,不为0说明当前最后一位是1,然后根据取模的结果去设置结果对应的二进制数的相关位,每一次循环之后都要把整数n右移一位,这样循环结束之后就可以把结果的相关二进制位设置好。

在设置结果二进制位时使用或操作和移位操作。

对与这些操作我们确实在平时的程序中用到的次数不多,但是如果没有用过的话很难想到使用位操作来解决问题,在编程之美119页有一道题和这道题目很像,但它是计算二进制表示中1的数目。

第三题是高精度乘法,两个整数用字符数组表示,最大位数是100位,然后计算二者乘积的结果,这是这次考试中最难的一道题目。

我们在这里也是使用数组来存储大数和大数的乘积,如果对乘法运算的过程理解的比较深刻,并且之前涉及过高精度运算的程序,这道题做起来还是很容易的,具体程序在我的日志里面有,我也在此再提醒一下自己结果为0的边界条件一定要处理,否则有些测试用例是无法通过的。

HW的这三道上机考试题不是很难,关键是对基本功的考察,最后一道题如果之前没有写过和它相关的任何程序的话,在规定的时间内要做出来还是比较难的,在我们的教材中基本上没有涉及过高精度运算的程序,不过在大二的程序设计与算法研讨课上一位学长讲过高精度加法的程序,如果课后自己动手写过那个程序,我想你一定会想到高精度乘法、高精度除法、高精度减法以及高精度阶乘该怎么做,或许想不到解决方法,但是随便上网一搜类似的程序很多,拿来研究一下,这些高精度计算的问题做起来举比较容易了。

2012最全华为上机试题及部分答案

2012最全华为上机试题及部分答案

2011年华为软件校园招聘编程测验1、请上机编写程序,按题目要求提交文件。

[详见考试说明,点击进入考试说明]3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。

两者相同则得分,不同则不得分。

4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目1,判断电话号码是否合法://要注意情况包含,有可能会同时出现几种不好的情况,要按照顺序输出错误。

不能同时输出好几种错误,应该是这样包含:先判断长度是否符合,再判断是否以86打头,再判断有无其他字符int fun(char num[]){ char *p=num;int n=strlen(num);if(n==13){if(*p=='8'&&*(p+1)=='6')while(*p!='\0'){if(*p>='0'&&*p<='9')p++;elsereturn 2;if(*p=='\0')return 0;}else return 3;}elsereturn 1;}int main(){char num[]="87139a3887671";int k=fun(num);cout<<k<<endl;return 0;}1. 数组比较(20分)•问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。

【免费下载】华为校园招聘机试题目及答案

【免费下载】华为校园招聘机试题目及答案

{ //sum_zj是专业评委总分数;sum_dz是大众评委总分数;count1专业评委人
数;count2大众评委人数 int sum_zj=0,sum_dz=0,count1=0,count2=0,r; for(int i=0;i<n;i++) { if(judge_type[i]==1) { sum_zj+=score[i]; count1++; } else { sum_dz+=score[i]; count2++; } } if(count2==0)//无大众评委 { r=int((sum_zj/count1)); } else { r=int((sum_zj/count1)*0.6+(sum_dz/count2)*0.4); } return r;
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根保通据护过生高管产中线工资敷艺料设高试技中卷术资0配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高高与中中带资资负料料荷试试下卷卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试.,卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试5交写卷、底重保电。要护气管设装设线备置备4敷高动调、设中作试电技资,高气术料并中课3中试且资件、包卷拒料中管含试绝试调路线验动卷试敷槽方作技设、案,术技管以来术架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

2012年华为校园招聘面试笔试题

2012年华为校园招聘面试笔试题

传说这是一道华为的面试题。

/*******************************************************************文件名: MinDifference(A VG).cpp问题描述: 有两个数组a、b,大小都为n,数组元素的值任意,无序;通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小,最后输出两个数组和数组元素和的差值解决思路:采用动态规划思想。

先求出一个规划目标的模糊值A VG,表示“完美”的a 与b的情况:a的元素和sa与b的元素和sb相等,并都等于AVG。

然后重置a与b:交换a与b中的元素,另a中存有最小的n个元素(此时sa必然大于A VG)。

b 中存有最大的n个元素(此时sb必然大于A VG);开始进行“完美逼近”规划:在一次a[k]与b[0...n-1]的循环中进行交换,使得此时的sa逼近A VG(此时的sb也在逼近A VG)。

在此过程中,如果sa与A VG相等,这就产生了“完美”数组a与b,保证sa与sb的差值为0。

如果到a[n-1] 时sa与A VG不等,不过此时的数组a和b已经能保证sa与sb的差值最小了正确性证明:(用反证法易证之)时间复杂度分析:O(n^2)关键步骤:Step 0:合并数组a和b到数组c,并对c按升序排序;Step 1:求出数组c元素的和,除以2,其值为A VG;Step 2:将数组c里前n个数设置为数组a,后n个数设置为数组b,并分别求出a元素与b元素的和,放入sa和sb;Step 3:设置整型计数器i = 0;Step 4:a[i]与b[n-i-1]对换,并计算此时的sa与sb;//(试探)Step 5:如果sa大于A VG,a[i]与b[n-i-1]并重新算计sa与sb;//(回溯)Step 6:否则(sa小于A VG时)分别按升序排序a和b;Step 7:i++;Step 8:如果i < n,执行Step 4;Step 9:一次“逼近”过程结束;开发平台: Win Xp SP2编译环境: CL.exe 8.0 (in Visual Studio 2005 SDK)作者: 88250完成日期: 2006-11-26 版本: 2.0修改之处:1. 修正了算法设计思想的描述:将贪心+回溯改为动态规划2. 修正了存在重复比较数组a和b元素的问题,大大提高了处理效率3. 可以从负值到正值地设定了数组元素的随机范围Blog: E-mail: DL88250@QQ: 845765 or 316281008*******************************************************************/#i nclude <ctime>#i nclude <vector>#i nclude <algorithm> // 使用快速排序#i nclude <iterator>#i nclude <iostream>#define TEST 0 // 测试开关using namespace std;// 全局数组描述:const int num_max = 100; // 最大数组容量const int range_min = -10; // 给定数组元素的最小值const int range_max = 10; // 给定数组元素的最大值vector<int> a; // 数组avector<int> b; // 数组bvector<int> c; // 数组cint average = 0; // 即算法描述中的A VGint sa = 0, sb = 0; // 分别保存数组a和b元素的和int sum_difference = 0; // 存放数组a和b的差值的绝对值// 全局函数描述:// 对数组v进行随机初始化void init(vector<int> &v);// 显示数组vvoid display(const vector<int> &v);// 对数组v的元素求和放到sum里void sum(const vector<int> &v, int &sum);// 合并数组v到c中void merge(const vector<int> &v, vector<int> &c);// 设置数组a的元素void set_a(void);// 设置数组b的元素void set_b(void);// 交换a与b的值void exchange(int &a, int &b);// 一次贪心的过程,产生符合条件的数组a和b// 返回这次贪心能产生的差值int kernel(int &k);// 输出当前的数组a和b与相应和及差值void outCurrent(void);// 主程序入口int main(int argc, char* argv[]){// 设置随机种子srand((unsigned)time(NULL));init(a);init(b);sum(a, sa);sum(b, sb);outCurrent();if (0 == sum_difference){// 就是最优解,不需要处理了,收工~ :-pcout << endl << endl << "Okey! " << endl;outCurrent();return 0;}// Step 0merge(a, c); merge(b, c);sort(c.begin(), c.end());#if TEST // 测试合并结果cout << "c:"; display(c);#endifvector<int> cpy_a;vector<int> cpy_b;int tmp_sum_diff = sum_difference, sum_difference = 0;cpy_a.assign(a.begin(), a.end());cpy_b.assign(b.begin(), b.end());// Step 1average = (sa + sb) / 2;// Step 2set_a(); sum(a, sa);set_b(); sum(b, sb);// 进行A VG“逼近”for (int k = 0; k < num_max; k++){sum_difference = kernel(k);if (tmp_sum_diff > sum_difference){cpy_a.clear(); cpy_b.clear();tmp_sum_diff = sum_difference;cpy_a.assign(a.begin(), a.end());cpy_b.assign(b.begin(), b.end());}if (0 == tmp_sum_diff){// 找到“完美”解,直接结束过程k = num_max;}}if (tmp_sum_diff < sum_difference){a.clear();b.clear();a.assign(cpy_a.begin(), cpy_a.end());b.assign(cpy_b.begin(), cpy_b.end());sum(a, sa); sum(b, sb);sum_difference = tmp_sum_diff;}// 最优结果输出cout << endl << endl << "Okey! " << endl;outCurrent();cout << "The runtime of this program: "<< (float)clock() / CLK_TCK << 's' << endl;return 0;}int kernel(int &k){for (int i = 0; i < num_max; i++){#if TEST // 测试当前数组a和b的值及相应和的情况cout << endl << "TEST:" << endl;outCurrent();cout << "END TEST" << endl;#endif// Step 4(试探)exchange(a[k], b[num_max-i-1]);sum(a, sa); sum(b, sb);if (sa > average) // Step 5(回溯){exchange(a[k], b[num_max-i-1]);sum(a, sa); sum(b, sb);}else if (sa < average) // Step 6{sort(a.begin(), a.end());sort(b.begin(), b.end());break;}else{// 发现“完美”解break;}}return sum_difference = abs(sa - sb);}void outCurrent(void){cout << "a:"; display(a);cout << "b:"; display(b);cout << "Sum a: " << sa << endl;cout << "Sum b: " << sb << endl;sum_difference = abs(sa - sb);cout << "The difference of a'sum and b'sum: "<< sum_difference << endl;return;}void init(vector<int> &v){for (int i = 0; i < num_max; i++){v.push_back((((double)rand() /(double)RAND_MAX) * range_max + range_min));}return;}void display(const vector<int> &v){for (vector<int>::const_iteratori = v.begin();i != v.end();i++){cout << ' ' << *i;}cout << endl;return;}void sum(const vector<int> &v, int &sum){sum = 0;for (vector<int>::const_iteratori = v.begin();i != v.end();i++){sum += *i;}return;}void merge(const vector<int> &v, vector<int> &c) {for (vector<int>::const_iteratori = v.begin();i != v.end();i++){c.push_back(*i);}return;}void set_a(void){a.clear();for (int i = 0; i < num_max; i++){a.push_back(c[i]);}return;}void set_b(void){b.clear();for (int i = num_max; i < 2 * num_max; i++){b.push_back(c[i]);}return;}void exchange(int &a, int &b){int tmp = a;a = b;b = tmp;return;}本文来自CSDN博客,转载请标明出处:/DL88250/archive/2006/12/02/1426601.aspx。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2012华为校园招聘上机试题+准确答案
1.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,
Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数void Stringchang(const char*inpu,char*output)
其中input是输入字符串,output是输出字符串
答案:
void Stringchang (char *input,char *output)
{ int len=strlen(input);
for(int i=0;i<len;i++)
{
if((input[i]<='Z'&&input[i]>='A')||(input[i]<='z'&&input[i]>='a'))
output[i]=input[i]+1;
else output[i]=input[i];
}
}
2.求一个整型数字中有没有相同的部分,例如12389756123这个整型数字中相同的部分是
123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。

方法是先将整型数字转换到数组中,再判断。

函数为int same(int num)
其中num是输入的整型数字
答案:参考第三题很容易写出代码!
3.求两个字符串的乘积,结果存到字符串中,例如字符串一中存的“657891”,字符串二
中存的“521”,分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来
函数为void mul(char *input1,int n,char *input2, int m,char *output)
其中input1和input2是输入,n是input1的长度,n2是input2的长度。

Output是输出答案:
void mul(char *input1,int n,char *input2, int m,char *output)
{ int num1=StrToNum(input1,n);
int num2=StrToNum(input2,m);
int muti=num1*num2;
NumToStr(muti,output);
cout<<output<<endl;
}
int StrToNum(char *input,int len) //字符串转为int型变量
{ int delta='0'-0,num=0;
for(int i=len-1;i>=0;i--)
{num+=(input[i]-delta)*pow(10.0,len-i-1);}
return num;
}
void NumToStr(int num,char *output) //int型变量转为字符串
{ int len=0;
while(1)
{int flag=num%(int)pow(10.0,len);
if(flag==num) break;
else len++;}
int delta='0'-0,num0=num;
for(int i=len-1;i>=0;i--)
{ output[len-i-1]=num0/(int)pow(10.0,i)+delta;
num0=num0%(int)pow(10.0,i);
}
output[len]='\0';
}。

相关文档
最新文档