华为机试题及答案.docx
《华为机试题及答案.docx》由会员分享,可在线阅读,更多相关《华为机试题及答案.docx(10页珍藏版)》请在冰豆网上搜索。
![华为机试题及答案.docx](https://file1.bdocx.com/fileroot1/2022-10/7/2093b7ff-0c63-4ff1-bb62-ebed175fd197/2093b7ff-0c63-4ff1-bb62-ebed175fd1971.gif)
华为机试题及答案
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;
}
else
{
if(pInputStr[y-1]!
='+'&&pInputStr[y-1]!
='-')
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
return;
}
else
{
op=pInputStr[y-1];
}
}
for(z=y+1;z {
if(pInputStr[z]>='0'&&pInputStr[z]<='9')
{
num[1]=num[1]*10+pInputStr[z]-'0';
}
else
{
pOutputStr[0]='0';
pOutputStr[1]='\0';
return;
}
}
if(op=='+')
{
re=num[0]+num[1];
}
else
{
re=num[0]-num[1];
}
itoa(re,pOutputStr,10);
}
intmain()
{
charin[20];
charon[20];
gets(in);
arithmetic(in,strlen(in),on);
printf("%s",on);
return0;
}
6、选秀节目打分,分为专家评委和大众评委,score[]数组里面存储每个评委打的分数,judge_type[]里存储与score[]数组对应的评委类别,judge_type[i]==1,表示专家评委,judge_type[i]==2,表示大众评委,n表示评委总数。
打分规则如下:
专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分=专家评委平均分*0.6+大众评委*0.4,总分取整。
如果没有大众评委,则总分=专家评委平均分,总分取整。
函数最终返回选手得分。
#include
#include
#include
intcal_score(intscore[],intjudge_type[],intn)
{
inti=0,gscore;
intpro=0,pub=0;
intpro_count=0,pub_count=0;
for(i=0;i {
if(judge_type[i]==1)
{
pro_count++;
pro=pro+score[i];
}
if(judge_type[i]==2)
{
pub_count++;
pub=pub+score[i];
}
}
if(pub_count!
=0)
{
gscore=pro/pro_count*0.6+pub/pub_co