您的当前位置:首页正文

华为机试题及答案

来源:帮我找美食网
华为机试题及答案

1、通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。

测试:输入:“abc def gh i d” 输出:“abc,def,gh,i,d,”

#include

#include

void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr)

{

int i=0,j=0;

int flag=0;

while(pInputStr[i]==' ')

{

i++;

}

for(;i{

if(pInputStr[i]==' ')

{

flag=1;

continue;

}

if(flag==1)

{

flag=0;

pOutputStr[j++]=',';

}

欢迎下载 —

2

pOutputStr[j++]=pInputStr[i];

}

pOutputStr[j++]=',';

pOutputStr[j]='\\0';

}

int main()

{

char test[40];

char re[40];

gets(test);

DivideString(test, strlen(test), re);

printf(\"%s\

return 0;

欢迎下载 —

3

}

2、将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。

测试:输入:char*input=\"abbbcd\" 输出:char*output=\"bcdcde\"

#include

#include

void convert(char *input,char* output)

{

int i;

for(i=0;i{

if(i==0)

{

欢迎下载

4

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)

{

欢迎下载 —

5

output[i]=97;

}

}

else

{

output[i]=input[i]+2;

if(output[i]==123)

{

output[i]=97;

}

if(output[i]==124)

{

output[i]=98;

欢迎下载 —

6

}

}

}

}

output[i+1]='\\0';

}

int main()

{

char in[20]={\"asdfzzxzxz\

char on[20];

//gets(in);

convert(in,on);

printf(\"%s\

欢迎下载 —

7

return 0;

}

3、通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。

测试:输入:“afafafaf” 输出:“af”

#include

#include

void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr)

{

int i,j,count;

int k=0;

for(i=0;i{

count=0;

欢迎下载

8

for(j=0;j{

if(pInputStr[i]==pOutputStr[j])

{

count++;

}

}

if(count==0)

{

pOutputStr[k++]=pInputStr[i];

}

}

pOutputStr[k]='\\0';

欢迎下载 —

9

}

int main()

{

char in[20]={\"aabbccabacddsads\

char on[20];

//gets(in);

stringFilter(in,strlen(in),on);

printf(\"%s\

return 0;

}

4、通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

测试:输入:“cccddecc” 输出:“3c2de2c”

#include

欢迎下载

10

#include

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)

{

int i,j=0,num=0;

int k=0;

for(i=0;i<=lInputLen;i++)

{

if(i&&pInputStr[i]!=pInputStr[i-1])

{

if(num>1)

{

pOutputStr[j++]=(char)num+'0';

}

欢迎下载 11

pOutputStr[j++]=pInputStr[i-1];

num=1;

}

else

{

num++;

}

}

pOutputStr[j]='\\0';

}

int main()

{

char in[20]={\"ccddecc\

欢迎下载 —

12

char on[20];

//gets(in);

stringZip(in,strlen(in),on);

printf(\"%s\

return 0;

}

5、通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。

输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。

测试:输入:“4 - 7” 输出:“-3”

#include

#include

#include

欢迎下载 13

void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)

{

int i,count=0,re=0;

int x,y,z;

int num[2]={0};

char op;

for(i=0;i{

if(pInputStr[i]==' ')

{

count++;

}

}

欢迎下载 14

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

欢迎下载 —

15

{

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';

欢迎下载 —

16

return ;

}

else

{

if(pInputStr[y-1]!='+'&&pInputStr[y-1]!='-')

{

pOutputStr[0]='0';

pOutputStr[1]='\\0';

return;

}

else

{

op=pInputStr[y-1];

欢迎下载 —

17

}

}

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;

欢迎下载 —

18

}

}

if(op=='+')

{

re=num[0]+num[1];

}

else

{

re=num[0]-num[1];

}

itoa(re,pOutputStr,10); }

int main()

欢迎下载 —

19

{

char in[20];

char on[20];

gets(in);

arithmetic(in,strlen(in),on);

printf(\"%s\

return 0;

}

6、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 * 0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。

#include

#include

欢迎下载

20

#include

int 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;i{

if(judge_type[i]==1)

{

pro_count++;

pro=pro+score[i];

}

欢迎下载 —

21

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;

欢迎下载 —

22

}

return gscore;

}

int main()

{

int score[5]={90,80,95,86,87};

int judge_type[5]={1,2,2,1,1};

int n=5;

printf(\"%d\

return 0;

}

7、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

欢迎下载

23

例如: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

void sort(int input[], int n, int output[])

{

int i,j,k,a;

int temp;

for(i=0;i{

for(j=0;j{

if(input[j]欢迎下载

24

{

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++];

欢迎下载 —

25

a++;

output[n/2+a-1]=input[k++];

}

}

int main()

{

int input[5]={99,80,95,86,87};

int output[5];

int n=5,i;

sort(input,n,output);

for(i=0;i{

printf(\"%d \

欢迎下载 —

26

}

return 0;

}

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

void scheduler(int task[], int n, int system_task[], int user_task[])

{

欢迎下载

27

int i,j,temp;

int a=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;

欢迎下载 —

28

}

}

}

for(i=0;i{

for(j=0;j{

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;

}

欢迎下载 —

29

}

}

for(i=0;i{

for(j=0;j{

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;

}

}

欢迎下载 —

30

}

system_task[a]=-1;

user_task[b]=-1;

}

int main()

{

int task[9] = {0, 30, 155, 1, 80, 300, 170, 40, 99};

int system_task[9];

int user_task[9];

int n=9,i;

scheduler(task, n,system_task,user_task);

for(i=0;system_task[i]!=-1;i++)

{

欢迎下载 —

31

printf(\"%d \

}

for(i=0;user_task[i]!=-1;i++)

{

printf(\"%d }

return 0;

}

欢迎下载 32

\

因篇幅问题不能全部显示,请点此查看更多更全内容

Top