应聘华为软件的上机试题及部分答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1,判断电话号码是否合法://要注意情况包含,有可能会同时出现几种不好的情况,要按照顺序输出错误。不能同时输出好几种错误,应该是这样包含:先判断长度是否符合,再判断是否以86打头,再判断有无其他字符intfun(charnum[]){char*p=num;intn=strlen(num);if(n==13){if(*p=='8'&&*(p+1)=='6')while(*p!='\0'){if(*p='0'&&*p='9')p++;elsereturn2;if(*p=='\0')return0;}elsereturn3;}elsereturn1;}intmain(){charnum[]=87139a3887671;intk=fun(num);coutkendl;return0;}2、数组比较(20分)•问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数比如:数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3•要求实现函数:intarray_compare(intlen1,intarray1[],intlen2,intarray2[])•示例1)输入:intarray1[]={1,3,5},intlen1=3,intarray2[]={77,21,1,3,5},intlen2=5函数返回:02)输入:intarray1[]={1,3,5},intlen1=3,intarray2[]={77,21,1,3,5,7},intlen2=6函数返回:3函数如下:usingnamespacestd;intf(intlen1,intarry1[],intlen2,intarry2[]){intk=0;for(inti=len1-1,j=len2-1;i=0&&j=0;i--,j--)if(arry1[i]!=arry2[j])k++;returnk;}intmain(){intnum1[]={1,3,5};intnum2[]={77,21,1,3,5};intk=f(3,num1,5,num2);coutkendl;return0;}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。•要求实现函数:voidarray_iterate(intlen,intinput_array[],intm,intoutput_array[])【输入】intlen:输入数列的长度;intintput_array[]:输入的初始数列intm:初始计数值【输出】intoutput_array[]:输出的数值出列顺序•示例输入:intinput_array[]={3,1,2,4},intlen=4,m=7输出:output_array[]={2,3,1,4}函数如下:voidfun(intlen,inta1[],intlen2,inta2[]){intn=0,i=-1,k=1,m=len2;while(1){for(intj=0;jm;){i=(i+1)%len;//注意这个是%,不要写成/if(a1[i]!=0)j++;}m=a1[i];a2[n++]=a1[i];a1[i]=0;if(k==len)break;k++;}}4.简单四则运算•问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注:1、表达式只含+,-,*,/四则运算符,不含括号2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况3、要考虑加减乘除按通常四则运算规定的计算优先级4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况•要求实现函数:intcalculate(intlen,char*expStr)【输入】intlen:字符串长度;char*expStr:表达式字符串;【输出】无【返回】计算结果•示例1)输入:char*expStr=“1+4*5-8/3”函数返回:192)输入:char*expStr=“8/3*3”函数返回:6简化版的四则运算:没有括号,只有加减乘除四种运算intfun(chara[],intlen)//字符数组和字符数组的长度{intnum[20];charstr[20];intk1=0,k2=0;intdata=0;for(inti=0;ilen;i++)//主要运算{if(a[i]='0'&&a[i]='9')num[k1++]=a[i]-'0';if(a[i]=='-'||a[i]=='+')str[k2++]=a[i];if(a[i]=='*'){num[k1-1]=num[k1-1]*(a[i+1]-'0');i++;}//遇见*,就运算,结果保存在数组中if(a[i]=='/'){num[k1-1]=num[k1-1]/(a[i+1]-'0');i++;}}inttemp=num[0];intj=0;//两个数组只剩下数组和加减运算符while(jk2){//顺序运算if(str[j]=='-')temp=temp-num[j+1];elseif(str[j]='+')temp=temp+num[j+1];j++;}returntemp;}intmain(){hara[]=3*3+7+4/3;intk=fun(a,9);coutkendl;return0;}函数实现2:中序表达式转换为后序表达式,使用算法实现intisp(charc){intp;switch(c){case'*':case'/':p=1;break;case'+':case'-':p=0;break;}returnp;}char*transf(intlen,chara[],charb[]){intk=0;stackchars1;for(inti=0;ilen;i++){if(a[i]='0'&&a[i]='9')b[k++]=a[i];else{if(s1.empty())s1.push(a[i]);elsewhile(isp(a[i])=isp(s1.top())){b[k++]=s1.top();s1.pop();}s1.push(a[i]);}}while(s1.empty()){b[k++]=s1.top();s1.pop();}b[k]='\0';returnb;}voidfun(charc,stacks2){charp1,p2;if(!s2.empty()){p1=s2.top();s2.pop();elsepos=false;coutkongzhanendl;}if(!s2.empty()){p2=s2.top();s2.top();elsepos=false;coutkongzhanendl;}if(pos=true)switch(c){case'+':s2.push(p1+p2);break;case'-':s2.push(p2-p1);break;case'*':s2.push(p1*p2);break;case'/':s2.push(p2/p1);break;}}voideval(chara[]){stackchars2;for(inti=len;ilen;i++){switch(a[i]){case'+':case'-':case'*':case'/':fun(a[i],&s2);break;default:s2.push(a[i]-'0');break;}}}intmain(){chara[]=1+4*5-8/3;intlen=strlen(a);charb[20];char*q=transf(9,a,b);coutqendl;return0;}5、一副牌中发五张扑克牌给你:让你判断数字的组成:有以下几种情况:1:四条:即四张一样数值的牌(牌均不论花色)2:三条带一对3:三条带两张不相同数值的牌4:两对5:顺子包括10,J,Q,K,A6:什么都不是7:只有一对思路:将数组排序,统计相同的数字的个数,再分情况讨论voidsort(inta[]){inttemp;for(inti=0;i5;i++)for(intj=0;j5;j++)if(a[i]a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}voidtest(inta[]){int*b=newint[5];intk=1;for(inti=0;i5;i++){b[i]=a[i];}for(intj=0;j4;j++)if(a[j]==a[j+1])k++;if(k==4){if(b[1]==b[3])cout四条endl;elsecout三条带一对endl;}if(k==3){if(b[1]!=b[2]||b[2]!=b[3])cout三条带两个不同的牌endl;elsecout两对endl;}if(k==2)cout一对endl;if(k==1){if(b[4]-b[0]==4&&b[4]-b[1]==3&&b[4]-b[2]==2&&b[4]-b[3]==1)cout顺子endl;elsecout什么都不是endl;}}intmain(){inta[]={1,2,4,4,4};test(a);return0;}6、求两个数组的和差就是去掉两个数组中相同的元素然后将两个数组中的元素存放在一个新的数组中,按大小顺序排序思路:将数组A和数组B分别进行排序,然后将A与B进行比较,重复的跳过去,不重复的赋给数组C,依次输出。while(ila&&jlb){if(aa[i]bb[j]){c[sub]=aa[i];++sub;++i;}elseif(aa[i]bb[j]){c[sub]=bb[j];++sub;++j;}elseif(aa[i]==bb[j]){++i;++j;}}for(;ila;++i){c[sub]=aa[i];++sub;}for(;jlb;++j){c[sub]=bb[j];++sub;}7、逆序单链表node*reverse(node*head){node*p1,*p2,*p3;p1=head;p2=head-next;while(p2){p3=p2-next;p2-next=p1;p1=p2;p2=p3;}head-next=NULL;head=p1;returnhead;}8、将一个字符串的元音字母复制到另一个字符串,并排序(30分)问题描述:有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功