华为上机题.docx
- 文档编号:25464598
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:8
- 大小:17.74KB
华为上机题.docx
《华为上机题.docx》由会员分享,可在线阅读,更多相关《华为上机题.docx(8页珍藏版)》请在冰豆网上搜索。
华为上机题
2012华为校园招聘上机笔试题
如同往年,华为今年刚一开学就来学校宣讲了,9月6日和7日安排了软件研发类的上机笔试(其他职位没有笔试,直接通过网上注册的简历筛选并安排面试)。
说下华为上机考试的特点和一些注意事项:
(1)考试时长为2个小时,总共有3个题(去年是2个题,难度要比今年大些),使用的是VC6.0;
(2)3个题目中大致第一个题是最简单的,第三个题是最难的,这个难度只是假设你对所有的题都不熟悉而言的,所以在拿到题目过后一定要把所有题目过一遍,弄懂它们的要点,看是否有自己熟悉的题目,也做到心里有数。
这算得上是我昨天笔试的时候的一个教训吧;
(3)从服务器上下载题目下来后最好能把工程保存到在电脑重启后不会自动还原的磁盘分区下面,这样不致由于各种意外因素电脑重启过后编的程序不会消失;
(4)不要改动所给函数的原型,可以自己添加函数。
另外,华为提供的工程是将Main函数隐藏了的,所以自己不用再添加Main函数。
以上便是我对于这次考试了解的一些情况,下面说说我做的3个笔试题(题意我只能大概的按我的理解组织下)。
1.从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5},array2[3]={1,3,5},从array1[4]与array2[2]比较开始,到array1[2]与array[0]比较结束。
这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3。
函数原型为intcompare_array(intlen1,intarray1[],intlen2,intarray2[]);
其中,len1与len2分别为数组array1[]和array2[]的长度,函数返回值为两个数组不同元素的个数。
以下是上题的函数实现:
compare_array
2. 约瑟夫环(待添加)
约瑟夫环是一个数学的应用问题:
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
#include
#include
typedefstructNode
{
intnum;
structNode*next;
}LinkList;
LinkList*creat(intn)
{
LinkList*p,*q,*head;
inti=1;
p=(LinkList*)malloc(sizeof(LinkList));
p->num=i;
head=p;
for(i=2;i<=n;i++)
{
q=(LinkList*)malloc(sizeof(LinkList));
q->num=i;
p->next=q;
p=q;
}
p->next=head; /*使链表尾指向链表头形成循环链表*/
returnhead;
}
voidfun(LinkList*L,intm)
{
inti;
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("%5d\n",p->num); } intmain() { LinkList*L; intn,m; n=9; m=5; L=creat(n); fun(L,m); return0; } 3. 字符串四则运算的实现 题目大意: 有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。 四则运算即: 加减乘除"+-*/",另外该表达式中的数字只能是1位(数值范围0~9)。 另若有不能整除的情况,按向下取整处理,eg: 8/3得出值为2。 若有字符串"8+7*2-9/3",计算出其值为19。 主要考点: 1.数字的字符形式变换为数字形式的方法;2.数字的数字形式变换为数字的字符串形式的方法。 (2.简单四则运算 注: 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 //********实现四则运算********* intcalculate(intlen,char*expStr) { intdata[20],datal=0; inti=0,k=0; intres; //**************转化为整数 while(*(expStr+i)! ='\0') { switch(*(expStr+i)) { case'+': data[i]=10;break; case'-': data[i]=11;break; case'*': data[i]=12;break; case'/': data[i]=13;break; default: data[i]=*(expStr+i)-'0';break; } i++; } datal=i; //**************计算 while(datal! =1) { if(datal>3) { if(data[1]<=11) //*******当第一个操作符是‘+’或者‘-’ { if((data[3]==10)||(data[3]==11)) //*****如果是‘+’或者‘-’ { if(data[1]==10) data[0]=data[0]+data[2]; else data[0]=data[0]-data[2]; datal=datal-2; for(k=1;k<=datal-1;k++) data[k]=data[k+2]; } if((data[3]==12)||(data[3]==13)) //*****如果是‘*’或者‘/’ { if(data[3]==12) data[2]=data[2]*data[4]; else data[2]=data[2]/data[4]; datal=datal-2; for(k=3;k<=datal-1;k++) data[k]=data[k+2]; } } else //*******当第一个操作符是‘*’或者‘/’ { if(data[1]==12) data[0]=data[0]*data[2]; else data[0]=data[0]/data[2]; datal=datal-2; for(k=1;k<=datal-1;k++) data[k]=data[k+2]; } } else { switch(data[1]) { case10: res=data[0]+data[2];break; case11: res=data[0]-data[2];break; case12: res=data[0]*data[2];break; case13: res=data[0]/data[2];break; } break; } } returnres; } void main() { char*strdata; intres; strdata="2+8/3*3+4"; res=calculate(3,strdata); printf("%d",res); } )
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 上机