华为校园招聘机试参考二.docx

上传人:b****3 文档编号:2853055 上传时间:2022-11-15 格式:DOCX 页数:12 大小:18.48KB
下载 相关 举报
华为校园招聘机试参考二.docx_第1页
第1页 / 共12页
华为校园招聘机试参考二.docx_第2页
第2页 / 共12页
华为校园招聘机试参考二.docx_第3页
第3页 / 共12页
华为校园招聘机试参考二.docx_第4页
第4页 / 共12页
华为校园招聘机试参考二.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

华为校园招聘机试参考二.docx

《华为校园招聘机试参考二.docx》由会员分享,可在线阅读,更多相关《华为校园招聘机试参考二.docx(12页珍藏版)》请在冰豆网上搜索。

华为校园招聘机试参考二.docx

华为校园招聘机试参考二

2011年华为软件校园招聘编程测验

类别:

软件C/C++语言

编程题(共3题,第一题20分,第二题30分,第三题50分,共100分)

注意:

1、请上机编写程序,按题目要求提交文件。

[详见考试说明,点击进入考试说明]

2、本试题采用自动执行测试用例进行评分,测试用例不对考生公开

3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。

两者相同则得分,不同则不得分。

4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况

5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误

6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分

7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目。

1. 数组比较(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

intarray_compare(intlen1,intarray1[],intlen2,intarray2[])

{

intcount=0;

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

{

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

{

count++;

}

}

returncount;

}

intmain()

{

intresult=0;

intarray1[]={1,3,5};

intlen1=3;

intarray2[]={77,12,1,3,5};

intlen2=5;

result=array_compare(len1,array1,len2,array2);

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

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

printf("theresultis%d",result);

}

2. 约瑟夫问题

•问题描述:

 

输入一个由随机数组成的数列(数列中每个数均是大于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

typedefstructNode

{

intnum;

structnode*next;

}node;

node*creat(intlen,intinput_array[])

{

node*h,*s,*p;

inti;

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

}

voidarray_iterate(intlen,intinput_array[],intm)

{

node*q,*p,*s;

inti=0,j=0,k;

intoutput_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("%5d\n",m);

output_array[j]=p->num;

k=j;

 

for(j=0;j<=k;j++)

{

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

}

}

intmain()

{

intinput_array[]={3,1,2,4};

intlen=4;

intm=7;

intoutput_array[4];

array_iterate(len,input_array,m,output_array);

}

 3. 简单四则运算

•问题描述:

 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值

注:

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

/*

*authorbywanww

*time:

2011-09-07

*/

usingnamespacestd;

intarray_compare(intlen1,intarray1[],intlen2,intarray2[])

{

if(len1==len2){

intcount=0;

for(inti=0;i

{

if(array1[i]!

=array2[i])count++;

}

returncount;

}elseif(len1

returnarray_compare(len1,array1,len1,array2+len2-len1);

}else{

returnarray_compare(len2,array1+len1-len2,len2,array2);

}

}

voidarray_iterate(intlen,intinput_array[],intm,intoutput_array[])

{

int*flag=newint[len];

memset(flag,0,len*4);

inthasout=0;//已经出列的数字个数

intstart=0;//开始的下标号

intj=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;

}

intcalculate(intlen,char*expStr)

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1