华为机试题及答案Word文档下载推荐.docx
《华为机试题及答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《华为机试题及答案Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
}
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"
voidconvert(char*input,char*output)
inti;
for(i=0;
strlen(input);
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)
}
else
output[i]=input[i]+2;
if(output[i]==124)
output[i]=98;
output[i+1]='
}
charin[20]={"
asdfzzxzxz"
};
charon[20];
//gets(in);
convert(in,on);
on);
3、通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
“afafafaf”输出:
“af”
voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr)
inti,j,count;
intk=0;
strlen(pInputStr);
count=0;
for(j=0;
j<
strlen(pOutputStr);
j++)
if(pInputStr[i]==pOutputStr[j])
count++;
if(count==0)
pOutputStr[k++]=pInputStr[i];
}
pOutputStr[k]='
aabbccabacddsads"
stringFilter(in,strlen(in),on);
4、通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
“cccddecc”输出:
“3c2de2c”
voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr)
inti,j=0,num=0;
=lInputLen;
if(i&
&
pInputStr[i]!
=pInputStr[i-1])
if(num>
1)
pOutputStr[j++]=(char)num+'
0'
pOutputStr[j++]=pInputStr[i-1];
num=1;
num++;
ccddecc"
stringZip(in,strlen(in),on);
5、通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:
“操作数1运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。
“4-7”输出:
“-3”
math.h>
voidarithmetic(constchar*pInputStr,longlInputLen,char*pOutputStr)
inti,count=0,re=0;
intx,y,z;
intnum[2]={0};
charop;
count++;
if(count!
=2)
pOutputStr[0]='
pOutputStr[1]='
return;
for(x=0;
pInputStr[x]!
='
x++)
if(pInputStr[x]>
pInputStr[x]<
9'
num[0]=num[0]*10+pInputStr[x]-'
pOutputStr[0]='
pOutputStr[1]='
return;
for(y=x+1;
pInputStr[y]!
y++)
if(y-x-1!
=1)
return;
else
if(pInputStr[y-1]!
+'
pInputStr[y-1]!
-'
op=pInputStr[y-1];
for(z=y+1;
z<
z++)
if(pInputStr[z]>
pInputStr[z]<
num[1]=num[1]*10+pInputStr[z]-'
if(op=='
re=num[0]+num[1];
re=num[0]-num[1];
itoa(re,pOutputStr,10);
charin[20];
gets(in);
arithmetic(in,strlen(in),on);
6、选秀节目打分,分为专家评委和大众评委,score[]数组里面存储每个评委打的分数,judge_type[]里存储与score[]数组对应的评委类别,judge_type[i]==1,表示专家评委,judge_type[i]==2,表示大众评委,n表示评委总数。
打分规则如下:
专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分=专家评委平均分*0.6+大众评委*0.4,总分取整。
如果没有大众评委,则总分=专家评委平均分,总分取整。
函数最终返回选手得分。
intcal_score(intscore[],intjudge_type[],intn)
inti=0,gscore;
intpro=0,pub=0;
intpro_count=0,pub_count=0;
n;
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_count*0.4;
gscore=pro/pro_count;
returngscore;
intscore[5]={90,80,95,86,87};
intjudge_type[5]={1,2,2,1,1};
intn=5;
%d"
cal_score(score,judge_type,n));
7、给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到output[]数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[]数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
input[]={3,6,1,9,7}output[]={3,7,9,6,1};
input[]={3,6,1,9,7,8}output[]={1,6,8,9,7,3}
voidsort(intinput[],intn,intoutput[])
inti,j,k,a;
inttemp;
n-i-1;
j++)
if(input[j]<
input[j+1])
temp=input[j+1];
input[j+1]=input[j];
input[j]=temp;
k=1;
a=1;
output[n/2]=input[0];
while(k<
n)
output[n/2-a]=input[k++];
a++;
output[n/2+a-1]=input[k++];
intinput[5]={99,80,95,86,87};
intoutput[5];
intn=5,i;
sort(input,n,output);
printf("
%d"
output[i]);
8、操作系统任务调度问题。
操作系统任务分为系统任务和用户任务两种。
其中,系统任务的优先级<
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}
voidscheduler(inttask[],intn,intsystem_task[],intuser_task[])
inti,j,temp;
inta=0,b=0;
if(task[i]<
50)
system_task[a++]=i;
if(task[i]>
=50&
task[i]<
=250)
user_task[b++]=i;
a;
a-i-1;
if(task[system_task[j]]>
task[system_task[j+1]])
temp=system_task[j+1];
system_task[j+1]=system_task[j];
system_task[j]=temp;
b;
b-i-1;
if(task[user_task[j]]>
task[user_task[j+1]])
temp=user_task[j+1];
user_task[j+1]=user_task[j];
user_task[j]=temp;
system_task[a]=-1;
user_task[b]=-1;
inttask[9]={0,30,155,1,80,300,170,40,99};
intsystem_task[9];
intuser_task[9];
intn=9,i;
scheduler(task,n,system_task,user_task);
system_task[i]!
=-1;
system_task[i]);
user_task[i]!
user_task[i]);
WelcomeTo
Download!
!
欢迎您的下载,资料仅供参考!