01 华为校园招聘机考试题总结(厦门大学) 19题_华为笔试题总结

其他工作总结 时间:2020-02-27 21:34:51 收藏本文下载本文
【www.daodoc.com - 其他工作总结】

01 华为校园招聘机考试题总结(厦门大学) 19题由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“华为笔试题总结”。

2012华为校园招聘机考试题总结(厦门大学)

1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#include #include #include #include int delete_sub_str(const char *str,const char *sub_str,char *result){ aert(str!= NULL && sub_str!= NULL);const char *p,*q;char *t,*temp;p = str;q = sub_str;t = result;int n,count = 0;n = strlen(q);temp =(char *)malloc(n+1);memset(temp,0x00,n+1);while(*p){

memcpy(temp,p,n);

if(strcmp(temp,q)== 0)

{

count++;

memset(temp,0x00,n+1);

p = p + n;

}

else

{

*t = *p;

p++;

t++;

memset(temp,0x00,n+1);

}

} free(temp);return count;} int main(){ char s[100] = {‘’};

int num = delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);

printf(“The number of sub_str is %drn”,num);

printf(“The result string is %srn”,s);}

2、约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。#include #include typedef struct Node {

int num;struct Node *next;}LinkList;LinkList *creat(int n){ LinkList *p,*q,*head;int i=1;p=(LinkList *)malloc(sizeof(LinkList));p->num=i;head=p;for(i=2;inum=i;p->next=q;p=q;} p->next=head;/*使链表尾指向链表头 形成循环链表*/ return head;} void fun(LinkList *L,int m){ int i;LinkList *p,*s,*q;p=L;printf(“出列顺序为:”);while(p->next!=p){

for(i=1;i

{ q=p;

p=p->next;

}

printf(“%5d”,p->num);

s=p;

q->next=p->next;

p=p->next;

free(s);} printf(“%5dn”,p->num);} int main(){ LinkList *L;int n, m;n=9;m=5;L=creat(n);fun(L,m);

return 0;}

3、比较一个数组的元素 是否为回文数组 #include #include

void huiwen(char str[]){ int i,len,k=1;len=strlen(str);for(i=0;i

if(str[i]!=str[len-i-1])

{

k=1;

break;

} } if(k==0)printf(“%s 不是一个回文数n”,str);else

printf(“%s 是一个回文数n”,str);} void main(){ char str[100] = {0};printf(“Input a string:”);/*提示输入Input a string:*/ scanf(“%s”, str);/*scan()函数输入一个字符串:*/ huiwen(str);}

4、数组比较(20分)• 问题描述:

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数 比如:

数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0 数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3 • 要求实现函数:

int array_compare(int len1, int array1[], int len2, int array2[])【输入】 int len1:输入被比较数组1的元素个数; int array1[]:输入被比较数组1;

int len2:输入被比较数组2的元素个数; int array2[]:输入被比较数组2; 【输出】 无

【返回】 不相等元素的个数,类型为int • 示例

1)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5 函数返回:0 2)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6 函数返回:3

#include #include #include int array_compare(int len1, int array1[], int len2, int array2[]){ int count=0;for(;len1>=0&&len2>=0;len1--,len2--){

if(array1[len1-1]==array2[len2-1])

{

count++;

}

} return count;} int main(){ int result=0;int array1[]={1,3,5};int len1=3;int array2[]={77,12,1,3,5};int len2=5;result=array_compare(len1, array1, len2, array2);///result=array_compare(len1, array1[], len2, array2[]);不能这样

// 函数形参中永远只是传得首地址,不能传数组 切记切记!!!

printf(“the result is %d”, result);}

5、约瑟夫问题

• 问题描述:

输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序

比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数 第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数 第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数 最后一轮计数出列数字为4,计数过程完成。输出数值出列顺序为:2,3,1,4。

• 要求实现函数:

void array_iterate(int len, int input_array[], int m, int output_array[])【输入】 int len:输入数列的长度; int intput_array[]:输入的初始数列 int m:初始计数值

【输出】 int output_array[]:输出的数值出列顺序 【返回】 无

• 示例

输入:int input_array[] = {3,1,2,4},int len = 4,m=7 输出:output_array[] = {2,3,1,4} ////////////循环链表实现////////////////////// #include #include #include typedef struct Node { int num;struct node *next;} node;node *creat(int len , int input_array[]){ node *h,*s,*p;int i;h=(node*)malloc(sizeof(node));h->num=input_array[0];p=h;for(i=1;i

s=(node*)malloc(sizeof(node));

s->num=input_array[i];

p->next=s;

p=s;} p->next=h;

return(h);} void array_iterate(int len, int input_array[], int m){ node *q,*p,*s;int i=0,j=0,k;int output_array[4];p=creat(len,input_array);while(p->next!=p){

for(i=1;i

{

q=p;

p=p->next;

}

m=p->num;printf(“%5d”,m);

output_array[j++]=m;

s=p;

q->next=p->next;

p=p->next;

free(s);

s=NULL;}

m=p->num;printf(“%5dn”,m);

output_array[j]=p->num;

k=j;

for(j=0;j

{

printf(“%5d”,output_array[j]);

} } int main(){ int input_array[]={3,1,2,4};int len=4;int m=7;int output_array[4];array_iterate(len, input_array, m, output_array);}

6、手机号码合法性判断(20分) 问题描述:

我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:86***。特点如下:

1、长度13位;

2、以86的国家码打头;

3、手机号码的每一位都是数字。

请实现手机号码合法性判断的函数要求: 1)如果手机号码合法,返回0; 2)如果手机号码长度不合法,返回1 3)如果手机号码中包含非数字的字符,返回2; 4)如果手机号码不是以86打头的,返回3;

【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。

 要求实现函数:

int verifyMsisdn(char* inMsisdn)【输入】 char* inMsisdn,表示输入的手机号码字符串。【输出】 无

【返回】 判断的结果,类型为int。 示例

输入: inMsisdn = “869123456789“ 输出: 无 返回: 1 输入: inMsisdn = “88***9“ 输出: 无 返回: 3 输入: inMsisdn = “86***9“ 输出: 无 返回: 0

#include #include #include #include #define LENGTH 13

int verifyMsisdn(char *inMsisdn){

char *pchar=NULL;aert(inMsisdn!=NULL);if(LENGTH==strlen(inMsisdn)){

if(('8'==*inMsisdn)&&(*(inMsisdn+1)=='6'))

{

while(*inMsisdn!='')

{

if((*inMsisdn>='0')&&(*inMsisdn

inMsisdn++;

else

return 2;

}

}

else

return 3;} else

return 1;return 0;}

int main(){ char *pchar=NULL;unsigned char ichar=0;int result;switch(ichar){ case 0:

pchar=“8612345363789”;break;case 1:

pchar=“***”;break;case 2:

pchar=“86s1234536366”;break;default:

break;} result =verifyMsisdn(pchar);printf(“result is %dn”,result);}

7、数组比较(20分)• 问题描述:

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数 比如:

数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0 数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3

• 要求实现函数:

int array_compare(int len1, int array1[], int len2, int array2[])

【输入】 int len1:输入被比较数组1的元素个数; int array1[]:输入被比较数组1;

int len2:输入被比较数组2的元素个数; int array2[]:输入被比较数组2; 【输出】 无

【返回】 不相等元素的个数,类型为int

• 示例

1)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5 函数返回:0 2)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6 函数返回:3

#include #include #include

int array_compare(int len1, int array1[], int len2, int array2[]){ int count=0;

for(;len1>=0&&len2>=0;len1--,len2--){

if(array1[len1-1]==array2[len2-1])

{

count++;

}

} return count;}

int main(){ int result=0;int array1[]={1,3,5};int len1=3;

int array2[]={77,12,1,3,5};int len2=5;

result=array_compare(len1, array1, len2, array2);///result=array_compare(len1, array1[], len2, array2[]);不能这样

// 函数形参中永远只是传得首地址,不能传数组 切记切记!!!

printf(“the result is %d”, result);}

8、简单四则运算

• 问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注:

1、表达式只含 +,-, *, / 四则运算符,不含括号

2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况

3、要考虑加减乘除按通常四则运算规定的计算优先级

4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生

5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况

• 要求实现函数:

int calculate(int len,char *expStr)【输入】 int len: 字符串长度; char *expStr: 表达式字符串; 【输出】 无

【返回】 计算结果

• 示例

1)输入:char *expStr = “1+4*5-8/3” 函数返回:19 2)输入:char *expStr = “8/3*3” 函数返回:6 #include /* * author by wanww * time: 2011-09-07 */ using namespace std;int array_compare(int len1, int array1[], int len2, int array2[]){ if(len1 == len2){

int count = 0;

for(int i=0;i

{

if(array1[i]!=array2[i])count++;

}

return count;} else if(len1

return array_compare(len1, array1,len1,array2+len2-len1);} else {

return array_compare(len2,array1+len1-len2,len2,array2);} }

void array_iterate(int len, int input_array[], int m,int output_array[]){ int * flag = new int[len];memset(flag,0,len*4);int hasout=0;//已经出列的数字个数

int start = 0;//开始的下标号

int j=0;//当前以报到的数字

while(true){

if(flag[start] == 0)//当前元素还没出列

{

j++;

if(j==m)//已经计数到m,当前start下标的元素出列

{

output_array[hasout] = input_array[start];

flag[start] = 1;//标记当前元素已经出列

hasout ++;

if(hasout == len)break;//所有的元素都已经出列,结束程序

//初始化下一轮的数字

j = 0;

m = input_array[start];

}

}

start ++;

if(start==len)start = 0;

} delete [] flag;

} int calculate(int len,char *expStr){ struct {

char opdata[200];

int top;}opstack;//定义操作符栈

opstack.top =-1;int i=0;//遍历字符串的下标

int t=0;//当前后缀表达式的长度

char ch = expStr[i];while(ch!=''){

switch(ch)

{

case '+':

case '-':

while(opstack.top!=-1)

{

expStr[t] = opstack.opdata[opstack.top];

opstack.top--;

t++;

}

opstack.top++;

opstack.opdata[opstack.top] = ch;

break;

case '*':

case '/':

while(opstack.top!=-1 &&(opstack.opdata[opstack.top] =='*' || opstack.opdata[opstack.top] =='/'))

{

expStr[t] = opstack.opdata[opstack.top];

opstack.top--;

t++;

}

opstack.top++;

opstack.opdata[opstack.top] = ch;

break;

default:

expStr[t] = ch;

t++;

break;

}

i++;

ch = expStr[i];} while(opstack.top!=-1)//将栈中所有的剩余的运算符出栈

{ expStr[t] = opstack.opdata[opstack.top];

opstack.top--;

t++;} expStr[t]='';struct {

int numeric[200];

int top;}data;data.top =-1;i=0;ch = expStr[i];while(ch!=''){

if(ch>='0' && ch

{

data.top++;

data.numeric[data.top] = ch-'0';

}

else if('+' == ch)

{

int tmp = data.numeric[data.top-1] + data.numeric[data.top];

data.top--;

data.numeric[data.top] = tmp;

}

else if('-' == ch)

{

int tmp = data.numeric[data.top-1]s1 + s2);} } int main(){ char s[MAX];//s是原字符串 char s1[MAX], s2[MAX];//s1是要替换的 //s2是替换字符串 puts(“Please input the string for s:”);scanf(“%s”, s);puts(“Please input the string for s1:”);scanf(“%s”, s1);puts(“Please input the string for s2:”);scanf(“%s”, s2);StrReplace(s, s1, s2);puts(“The string of s after displace is:”);printf(“%sn”, s);return 0;} 答案三:

#include #include #include #define M 100 void StrReplace(char* strSrc, char* strFind, char* strReplace);int main(){ char s[]=“ABCDEFGHIJKLMNOPQRSTUVWXYZ”;char s1[]=“RST”;char s2[]=“gggg”;StrReplace(s,s1,s2);printf(“%sn”,s);return 0;} void StrReplace(char* strSrc, char* strFind, char* strReplace){ while(*strSrc!= ''){

if(*strSrc == *strFind)

{

if(strncmp(strSrc,strFind,strlen(strFind))== 0)

{

int i = strlen(strFind);

int j = strlen(strReplace);

printf(“i = %d,j = %dn”,i,j);

char *q = strSrc + i;

printf(“*q = %sn”,q);

while((*strSrc++ = *strReplace++)!= '');

printf(“strSrc1);

printf(”*q = %sn“,q);

while((*strSrc++ = *q++)!= '');

}

else

{

strSrc++;

}

}

else

{

strSrc++;

} } }

15、编写一个程序实现功能:将字符串”Computer Secience”赋给一个字符数组,然后从第一个字母开始间隔的输出该串,用指针完成。答案:

#include #include int main(){ char str[]=”Computer Science”;int flag=1;char *p=str;while(*p){ if(flag){

printf(“%c”,*p);} flag =(flag + 1)% 2;p++;} printf(“n”);return 0;}

16、使用C语言实现字符串中子字符串的替换 描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了: ABCDEFGHIJKLMNOPQgggUVWXYZ 答案一:

#include #include void StrReplace(char* strSrc, char* strFind, char* strReplace);#define M 100;void main(){char s[]=”ABCDEFGHIJKLMNOPQRSTUVWXYZ“;char s1[]=”RST“;char s2[]=”ggg“;StrReplace(s,s1,s2);printf(”%sn“,s);} void StrReplace(char* strSrc, char* strFind, char* strReplace){ int i=0;int j;int n=strlen(strSrc);int k=strlen(strFind);for(i=0;i

else continue;} } } } 答案二:

#include #define MAX 100 StrReplace(char *s, char *s1, char *s2){ char *p;for(;*s;s++){ for(p = s1;*p && *p!= *s;p++);if(*p)*s = *(p1 = %sn”,strSrc-1);

printf(“*q = %sn”,q);

while((*strSrc++ = *q++)!= '');

}

else

{

strSrc++;

}

}

else

{

strSrc++;

} } }

17、编写一个程序实现功能:将两个字符串合并为一个字符串并且输出,用指针实现。

char str1[20]={“Hello ”}, str2[20]={“World ”};答案:

#include

int main(){ char str1[20]={“Hello ”}, str2[20]={“World ”};char *p=str1, *q=str2;

while(*p)p++;while(*q){ *p = *q;p++;q++;} *p = ‘’;printf(“%sn”, str1);

return 0;}

18、算分数的问题,去掉一个最高分一个最低分,求平均分

1.#include 2.float avescore(float score[],int n)3.{ 4.float min=0;5.float max=0;6.int minindex=0;7.int maxindex=0;8.float sum=0;9.min=score[0];10.for(int i=0;imax)20.{ 21.max=score[i];22.maxindex=i;23.} 24.score[maxindex]=0;25.for(i=0;i

29.} 30.void main()31.{ 32.float score[6]={70,80,90,98,87,86};33.float lastscore;34.lastscore=avescore(score,6);35.printf(“the last score is :%5.2fn”,lastscore);36.37.} 运行结果:

the last score is :85.7519、对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。

思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。

#include 1.#include 2.3.void jiou(int a[],int n)4.{ 5.int *p1;6.int *p2;7.int i,j;8.int k=0;9.int kk=0;10.int count1=0;11.int count2=0;12.int temp;13.int temp2;14.int m=0;15.p1=(int*)malloc(sizeof(int)*n);16.p2=(int*)malloc(sizeof(int)*n);17.for(i=0;i

23.for(i=0;i

26.if((a[i]%2)!=0)27.{p2[kk++]=a[i];} 28.else 29.{p1[k++]=a[i];} 30.} 31.count1=k;32.count2=kk;33.34.for(i=0;i

38.for(i=0;ip2[j+1])41.{temp2=p2[j];p2[j]=p2[j+1];p2[j+1]=temp2;} 42.for(i=0;i

46.for(i=0;i

50.51.for(i=0;i

59.60.61.if(count1>count2)62.63.{ 64.for(i=0;i

73.} 74.else 75.{ 76.for(i=0;i

82.} 83.for(i=0;i

86.} 87.for(i=0;i

91.} 92.void main()93.{ 94.int a[10]={2,3,14,6,2,15,12,14,4,11};95.jiou(a,10);96.97.} 运行结果: 3 15 11 3 11 15 2 14 6 2 12 14 4 14 14 12 6 4 2 2 3 14 11 14 15 12 6 4 2 2

下载01 华为校园招聘机考试题总结(厦门大学) 19题word格式文档
下载01 华为校园招聘机考试题总结(厦门大学) 19题.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文