华为机试题杭州实用word文档 28页.docx
《华为机试题杭州实用word文档 28页.docx》由会员分享,可在线阅读,更多相关《华为机试题杭州实用word文档 28页.docx(24页珍藏版)》请在冰豆网上搜索。
华为机试题杭州实用word文档28页
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
==本文为word格式,下载后可方便编辑和修改!
==
华为机试题(杭州)
篇一:
华为机试题及答案
华为机试题及答案
1、通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。
请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。
测试:
输入:
“abcdefghid”输出:
“abc,def,gh,i,d,”
#include
#include
voidDivideString(constchar*pInputStr,longlInputLen,char*pOutputStr){
inti=0,j=0;
intflag=0;
while(pInputStr[i]=='')
{
i++;
}
for(;i{
if(pInputStr[i]=='')
{
flag=1;
continue;
}
if(flag==1)
{
flag=0;
pOutputStr[j++]=',';
}
pOutputStr[j++]=pInputStr[i];
}
pOutputStr[j++]=',';
pOutputStr[j]='\0';
}
intmain()
{
chartest[40];
charre[40];
gets(test);
DivideString(test,strlen(test),re);
printf("%s",re);
return0;
}
2、将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换
后输出:
a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。
例如:
aa转换为bc,zz转换为ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
测试:
输入:
char*input="abbbcd"输出:
char*output="bcdcde"
#include
#include
voidconvert(char*input,char*output)
{
inti;
for(i=0;i{
if(i==0)
{
output[i]=input[i]+1;
if(output[i]==123)
{
output[i]=97;
}
}
else
{
if(input[i]!
=input[i-1])
{
output[i]=input[i]+1;
if(output[i]==123)
{
output[i]=97;
}
}
else
{
output[i]=input[i]+2;
if(output[i]==123)
{
output[i]=97;
}
if(output[i]==124)
{
output[i]=98;
}
}
}
}
output[i+1]='\0';
}
intmain()
{
charin[20]={"asdfzzxzxz"};
charon[20];
//gets(in);
convert(in,on);
printf("%s",on);
return0;
}
3、通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
测试:
输入:
“afafafaf”输出:
“af”
#include
#include
voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr){
inti,j,count;
intk=0;
for(i=0;i{
count=0;
for(j=0;j{
if(pInputStr[i]==pOutputStr[j])
{
count++;
}
}
if(count==0)
{
pOutputStr[k++]=pInputStr[i];
}
}
pOutputStr[k]='\0';
}
intmain()
{
charin[20]={"aabbccabacddsads"};
charon[20];
//gets(in);
stringFilter(in,strlen(in),on);
printf("%s",on);
return0;
}
4、通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
测试:
输入:
“cccddecc”输出:
“3c2de2c”
#include
#include
voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr)
{
inti,j=0,num=0;
intk=0;
for(i=0;i<=lInputLen;i++)
{
if(i&&pInputStr[i]!
=pInputStr[i-1])
{
if(num>1)
{
pOutputStr[j++]=(char)num+'0';
}
pOutputStr[j++]=pInputStr[i-1];
num=1;
}
else
{
num++;
}
}
pOutputStr[j]='\0';
}
intmain()
{
charin[20]={"ccddecc"};
charon[20];
//gets(in);
stringZip(in,strlen(in),on);
printf("%s",on);
return0;
}
5、通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:
“操作数1运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。
测试:
输入:
“4-7”输出:
“-3”
#include
#include
#include
voidarithmetic(constchar*pInputStr,longlInputLen,char*pOutputStr){
inti,count=0,re=0;
intx,y,z;
intnum[2]={0};
charop;
for(i=0;i{
if(pInputStr[i]=='')
{
count++;
}
}
if(count!
=2)
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
return;
}
for(x=0;pInputStr[x]!
='';x++)
{
if(pInputStr[x]>='0'&&pInputStr[x]<='9')
{
num[0]=num[0]*10+pInputStr[x]-'0';
}
else
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
return;
}
}
for(y=x+1;pInputStr[y]!
='';y++)
{
}
if(y-x-1!
=1)
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
return;
}
篇二:
最全华为上机试题及部分答案
201X年华为软件校园招聘编程测验
1、请上机编写程序,按题目要求提交文件。
[详见考试说明,点击进入考试说明]
3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。
两者相同则得分,不同则不得分。
4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况
5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误
6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分
7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目
(17)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++;
else
return2;
if(*p=='\0')
return0;
}
elsereturn3;
}
else
return1;
}
intmain()
{
charnum[]="87139a3887671";
intk=fun(num);
cout<return0;}
(18)数组比较(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函数返回:
0
2)输入:
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);
cout<ret