华为机试题及答案.docx
- 文档编号:6799160
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:16
- 大小:17.67KB
华为机试题及答案.docx
《华为机试题及答案.docx》由会员分享,可在线阅读,更多相关《华为机试题及答案.docx(16页珍藏版)》请在冰豆网上搜索。
华为机试题及答案
.
华为机试题及答案
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_count*0.4; } else { gscore=pro/pro_count; } returngscore; } intmain() { intscore[5]={90,80,95,86,87}; 精品 . intjudge_type[5]={1,2,2,1,1}; intn=5; printf("%d",cal_score(score,judge_type,n)); return0; } 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} #include #include #include voidsort(intinput[],intn,intoutput[]) { inti,j,k,a; inttemp; for(i=0;i { for(j=0;j { if(input[j] { temp=input[j+1]; input[j+1]=input[j]; input[j]=temp; } } } k=1; a=1; output[n/2]=input[0]; while(k { output[n/2-a]=input[k++]; a++; output[n/2+a-1]=input[k++]; } } intmain() { 精品 . intinput[5]={99,80,95,86,87}; intoutput[5]; intn=5,i; sort(input,n,output); for(i=0;i { printf("%d",output[i]); } return0; } 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}#include #include #include voidscheduler(inttask[],intn,intsystem_task[],intuser_task[]) { inti,j,temp; inta=0,b=0; for(i=0;i { if(task[i]<50) { system_task[a++]=i; } else { if(task[i]>=50&&task[i]<=250) { user_task[b++]=i; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 试题 答案