1、华为机试题及答案华为机试题及答案1、通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用,将其分隔,并且在最后也补充一个,并将子串存储。测试:输入:“abc def gh i d” 输出:“abc,def,gh,i,d,”#include#includevoid DivideString(const char *pInputStr, long lInputLen, char *pOutputStr) int i=0,j=0; int flag=0; while(pInputStri= ) i+; for(;ib,b-c,y-z,z-
2、a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。测试:输入:char*input=abbbcd 输出:char*output=bcdcde#include#includevoid convert(char *input,char* output) int i; for(i=0;istrlen(input);i+) if(i=0) outputi=inputi+1; if(outputi=123) outputi=97; else if(inputi!=inputi-1)
3、 outputi=inputi+1; if(outputi=123) outputi=97; else outputi=inputi+2; if(outputi=123) outputi=97; if(outputi=124) outputi=98; outputi+1=0;int main() char in20=asdfzzxzxz; char on20; /gets(in); convert(in,on); printf(%s,on); return 0;3、通过键盘输入一串小写字母(az)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。测
4、试:输入:“afafafaf” 输出:“af”#include#includevoid stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr) int i,j,count; int k=0; for(i=0;istrlen(pInputStr);i+) count=0; for(j=0;jstrlen(pOutputStr);j+) if(pInputStri=pOutputStrj) count+; if(count=0) pOutputStrk+=pInputStri; pOutputStrk=0;int
5、main() char in20=aabbccabacddsads; char on20; /gets(in); stringFilter(in,strlen(in),on); printf(%s,on); return 0;4、通过键盘输入一串小写字母(az)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。测试:输入:“cccddecc” 输出:“3c2de2c”#include#includevoid stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) in
6、t i,j=0,num=0; int k=0; for(i=0;i1) pOutputStrj+=(char)num+0; pOutputStrj+=pInputStri-1; num=1; else num+; pOutputStrj=0;int main() char in20=ccddecc; char on20; /gets(in); stringZip(in,strlen(in),on); printf(%s,on); return 0;5、通过键盘输入100以正整数的加、减运算式,请编写一个程序输出运算结果字符串。输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运
7、算符”之间以一个空格隔开。测试:输入:“4 - 7” 输出:“-3”#include#include#includevoid arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr) int i,count=0,re=0; int x,y,z; int num2=0; char op; for(i=0;i=0&pInputStrx=9) num0=num0*10+pInputStrx-0; else pOutputStr0=0; pOutputStr1=0; return; for(y=x+1;pInputStry!
8、= ;y+) if(y-x-1!=1) pOutputStr0=0; pOutputStr1=0; return ; else if(pInputStry-1!=+&pInputStry-1!=-) pOutputStr0=0; pOutputStr1=0; return; else op=pInputStry-1; for(z=y+1;z=0&pInputStrz=9) num1=num1*10+pInputStrz-0; else pOutputStr0=0; pOutputStr1=0; return; if(op=+) re=num0+num1; else re=num0-num1;
9、itoa(re,pOutputStr,10); int main() char in20; char on20; gets(in); arithmetic(in,strlen(in),on); printf(%s,on); return 0;6、选秀节目打分,分为专家评委和大众评委,score 数组里面存储每个评委打的分数,judge_type 里存储与 score 数组对应的评委类别,judge_typei = 1,表示专家评委,judge_typei = 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分
10、 * 0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。#include#include#includeint cal_score(int score, int judge_type, int n) int i=0,gscore; int pro=0,pub=0; int pro_count=0,pub_count=0; for(i=0;in;i+) if(judge_typei=1) pro_count+; pro=pro+scorei; if(judge_typei=2) pub_count+; pub=pub+sc
11、orei; if(pub_count!=0) gscore=pro/pro_count*0.6+pub/pub_count*0.4; else gscore=pro/pro_count; return gscore; int main() int score5=90,80,95,86,87; int judge_type5=1,2,2,1,1; int n=5; printf(%d,cal_score(score, judge_type, n); return 0;7、给定一个数组input ,如果数组长度n为奇数,则将数组中最大的元素放到 output 数组最中间的位置,如果数组长度n为偶数
12、,则将数组中最大的元素放到 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#includevoid sort(int input, int n, int output) int i,j,k,a; int temp; for(i=0;in;i+) for(j=0;jn-i-1;j+)
13、 if(inputjinputj+1) temp=inputj+1; inputj+1=inputj; inputj=temp; k=1; a=1; outputn/2=input0; while(kn) outputn/2-a=inputk+; a+; outputn/2+a-1=inputk+; int main() int input5=99,80,95,86,87; int output5; int n=5,i; sort(input,n,output); for(i=0;in;i+) printf(%d ,outputi); return 0;8、操作系统任务调度问题。操作系统任务分
14、为系统任务和用户任务两种。其中,系统任务的优先级 = 50且 = 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task,长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task 中的任务按照系统任务、用户任务依次存放到 system_task 数组和 user_task 数组中(数组中元素的值是任务在task 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入队顺序排列(即先入队的任务排在前面),数组元素为-1表示结束。例如:task = 0, 30, 155, 1, 80, 300, 170, 40
15、, 99 system_task = 0, 3, 1, 7, -1 user_task = 4, 8, 2, 6, -1#include#include#includevoid scheduler(int task, int n, int system_task, int user_task) int i,j,temp; int a=0,b=0; for(i=0;in;i+) if(taski=50&taski=250) user_taskb+=i; for(i=0;ia;i+) for(j=0;jtasksystem_taskj+1) temp=system_taskj+1; system_
16、taskj+1=system_taskj; system_taskj=temp; for(i=0;ib;i+) for(j=0;jtaskuser_taskj+1) temp=user_taskj+1; user_taskj+1=user_taskj; user_taskj=temp; system_taska=-1; user_taskb=-1;int main() int task9 = 0, 30, 155, 1, 80, 300, 170, 40, 99; int system_task9; int user_task9; int n=9,i; scheduler(task, n,system_task,user_task); for(i=0;system_taski!=-1;i+) printf(%d ,system_taski); for(i=0;user_taski!=-1;i+) printf(%d ,user_taski); return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1