最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

华为机试题及答案

IT圈 admin 41浏览 0评论

2024年2月21日发(作者:掌元绿)

. . -

华为机试题及答案

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

测试:输入:“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]==' ')

{

}

for(;i

{

if(pInputStr[i]==' ')

{

flag=1;

continue;

i++;

输出:“abc,def,gh,i,d,”

- . .可修编.

. . -

}

}

}

if(flag==1)

{

}

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

flag=0;

pOutputStr[j++]=',';

pOutputStr[j++]=',';

pOutputStr[j]='0';

int main()

{

}

2、将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后char test[40];

char re[40];

gets(test);

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

printf("%s",re);

return 0;

- . .可修编.

. . -

一个字母需要连续转换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)

{

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

- . .可修编.

. . -

}

int main()

{

}

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;

char in[20]={"asdfzzxzxz"};

char on[20];

//gets(in);

convert(in,on);

printf("%s",on);

return 0;

- . .可修编.

. . -

for(j=0;j

{

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

{

count++;

}

}

if(count==0)

{

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

}

}

pOutputStr[k]='0';

}

int main()

{

char in[20]={"aabbccabacddsads"};

char on[20];

//gets(in);

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

printf("%s",on);

return 0;

- . .可修编.

. . -

}

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

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

#include

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

}

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

num=1;

}

else

- . .可修编.

. . -

}

}

{

}

num++;

pOutputStr[j]='0';

int main()

{

}

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

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

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

#include

#include

char in[20]={"ccddecc"};

char on[20];

//gets(in);

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

printf("%s",on);

return 0;

- . .可修编.

. . -

#include

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

}

}

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

}

int main()

{

char in[20];

char on[20];

gets(in);

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

printf("%s",on);

return 0;

}

- . .可修编.

. . -

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

#include

#include

#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)

{

}

if(judge_type[i]==2)

pro_count++;

pro=pro+score[i];

- . .可修编.

. . -

{

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;

}

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",cal_score(score, judge_type, n));

return 0;

- . .可修编.

. . -

}

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

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]

{

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

}

}

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

- . .可修编.

. . -

}

{

}

return 0;

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}

#include

#include

#include

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

{

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;

}

}

}

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;

}

}

}

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;

}

}

}

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++)

{

printf("%d ",system_task[i]);

}

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

{

printf("%d ",user_task[i]);

}

return 0;

}

- . .可修编.

2024年2月21日发(作者:掌元绿)

. . -

华为机试题及答案

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

测试:输入:“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]==' ')

{

}

for(;i

{

if(pInputStr[i]==' ')

{

flag=1;

continue;

i++;

输出:“abc,def,gh,i,d,”

- . .可修编.

. . -

}

}

}

if(flag==1)

{

}

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

flag=0;

pOutputStr[j++]=',';

pOutputStr[j++]=',';

pOutputStr[j]='0';

int main()

{

}

2、将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后char test[40];

char re[40];

gets(test);

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

printf("%s",re);

return 0;

- . .可修编.

. . -

一个字母需要连续转换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)

{

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

- . .可修编.

. . -

}

int main()

{

}

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;

char in[20]={"asdfzzxzxz"};

char on[20];

//gets(in);

convert(in,on);

printf("%s",on);

return 0;

- . .可修编.

. . -

for(j=0;j

{

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

{

count++;

}

}

if(count==0)

{

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

}

}

pOutputStr[k]='0';

}

int main()

{

char in[20]={"aabbccabacddsads"};

char on[20];

//gets(in);

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

printf("%s",on);

return 0;

- . .可修编.

. . -

}

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

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

#include

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

}

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

num=1;

}

else

- . .可修编.

. . -

}

}

{

}

num++;

pOutputStr[j]='0';

int main()

{

}

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

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

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

#include

#include

char in[20]={"ccddecc"};

char on[20];

//gets(in);

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

printf("%s",on);

return 0;

- . .可修编.

. . -

#include

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

}

}

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

}

int main()

{

char in[20];

char on[20];

gets(in);

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

printf("%s",on);

return 0;

}

- . .可修编.

. . -

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

#include

#include

#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)

{

}

if(judge_type[i]==2)

pro_count++;

pro=pro+score[i];

- . .可修编.

. . -

{

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;

}

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",cal_score(score, judge_type, n));

return 0;

- . .可修编.

. . -

}

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

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]

{

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

}

}

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

- . .可修编.

. . -

}

{

}

return 0;

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}

#include

#include

#include

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

{

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;

}

}

}

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;

}

}

}

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;

}

}

}

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++)

{

printf("%d ",system_task[i]);

}

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

{

printf("%d ",user_task[i]);

}

return 0;

}

- . .可修编.

发布评论

评论列表 (0)

  1. 暂无评论