华为机试题目Word文档格式.docx
- 文档编号:20433960
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:124
- 大小:122.60KB
华为机试题目Word文档格式.docx
《华为机试题目Word文档格式.docx》由会员分享,可在线阅读,更多相关《华为机试题目Word文档格式.docx(124页珍藏版)》请在冰豆网上搜索。
;
break;
case1:
861111111111111"
case2:
86s1234536366"
break;
default:
result=verifyMsisdn(pchar);
printf("
resultis%d\n"
result);
华赛面试:
1.
charm[]={"
I"
"
LOVE"
CHINA"
char*p=m;
%s"
*p++);
%c"
**p);
doublex=1;
doubley;
y=x+3/2;
%f\n"
y);
}//////结果为2.000000
3.
4.找错
unsignedintf()
unsignedchara=123;
unsignedcharres;
while(a-->
=0)
res+=a;
returnres;
}//res没有初始化
5.
structnode
intdata;
node*pre;
node*next;
结构体数组转双向循环链表
1.数组比较(20分)
•问题描述:
比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组
长度不等,则只比较较短长度数组个数元素。
请编程实现上述比较,并返回比较
中发现的不相等元素的个数
比如:
数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0
数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3
•要求实现函数:
intarray_compare(intlen1,intarray1[],intlen2,intarray2[])
【输入】intlen1:
输入被比较数组1的元素个数;
intarray1[]:
输入被比较数组1;
intlen2:
输入被比较数组2的元素个数;
intarray2[]:
输入被比较数组2;
【输出】无
【返回】不相等元素的个数,类型为int
•示例
1)输入:
intarray1[]={1,3,5},intlen1=3,
intarray2[]={77,21,1,3,5},intlen2=5
函数返回:
2)输入:
intarray2[]={77,21,1,3,5,7},intlen2=6
3
intcount=0;
for(;
len1>
0&
len2>
0;
len1--,len2--)
if(array1[len1-1]!
=array2[len2-1])
count++;
}//蓝色字体部分也可以换成如下的代码if(array1[len1-1]==array2[len2-1])break;
elsecount++;
returncount;
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[]);
不能这样
//函数形参
中永远只是传得首地址,不能传数组切记切记!
!
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。
voidarray_iterate(intlen,intinput_array[],intm,intoutput_arra
y[])
【输入】intlen:
输入数列的长度;
intintput_array[]:
输入的初始数列
intm:
初始计数值
【输出】intoutput_array[]:
输出的数值出列顺序
【返回】无
输入:
intinput_array[]={3,1,2,4},intlen=4,m=7
输出:
output_array[]={2,3,1,4}
////////////循环链表实现//////////////////////
typedefstructNode
intnum;
structNode*next;
}node;
node*creat(intlen,intinput_array[])
node*h,*p,*s;
inti;
h=(node*)malloc(sizeof(node));
h->
num=input_array[0];
p=h;
for(i=1;
i<
len;
i++)
s=(node*)malloc(sizeof(node));
s->
num=input_array[i];
p->
next=s;
p=s;
next=h;
return(h);
voidarray_iterate(intlen,intinput_array[],intm,intoutput_array[])
node*p,*q,*s;
inti=0,j=0,k;
p=creat(len,input_array);
while(p->
next!
=p)
m;
q=p;
p=p->
next;
m=p->
num;
%5d"
m);
output_array[j++]=m;
s=p;
q->
next=p->
free(s);
s=NULL;
%5d\n"
output_array[j]=m;
k=j;
for(j=0;
j<
=k;
j++)
output_array[j]);
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、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算
符字符,除此之外不含其它任何字符,不会出现计算溢出情况
intcalculate(intlen,char*expStr)
【输入】intlen:
字符串长度;
char*expStr:
表达式字符串;
【返回】计算结果
char*expStr=“1+4*5-8/3”
19
char*expStr=“8/3*3”
6
第六题:
类似昨天Sara说的最后一题:
给你一个数组a[],数组长度len以及一个整数m
从数组中第一个数字数起找到第m个数字输出a[m]然后再将a[m]赋值给
m,从数组的下一个元素数起,找到第m个元素输出,以此进行直到数组中的元素
全部输出
第五题:
一副牌中发五张扑克牌给你:
让你判断数字的组成:
有以下几种情况:
1:
四条:
即四张一样数值的牌(牌均不论花色)
2:
三条带一对
3:
三条带两张不相同数值的牌
4:
两对
5:
顺子包括10,J,Q,K,A
6:
什么都不是
7:
只有一对
第一题:
比较一个数组的元素是否为回文数组
#include<
inthuiwen(charstr[])
inti,len,k=1;
len=strlen(str);
for(i=0;
len/2;
if(str[i]!
=str[len-i-1])
k=1;
if(k==0)
%s不是一个回文数\n"
str);
%s是一个回文数\n"
voidmain()
charstr[100]={0};
intlen;
Inputastring:
"
);
/*提示输入Inputastring:
*/
scanf("
str);
/*scan()函数输入一个字符串:
huiwen(str);
第二题:
求两个数组的和差就是去掉两个数组中相同的元素然后将两个数组
中的元素存放在一个新的数组中切数组A中元素要在B数组元素之前
第三题:
比较汗求简单的四则运算
参与运算的数字只有0--9
逆序单链表
第一题【20分】:
鉴定回文数组。
第二题【30分】:
求两个整型数组的异集,即A+B-(A与B的交集)。
第三题【50分】:
判定德州扑克的牌型。
给5张牌,返回它的牌型,4个的,3
个+对子,顺子,3个+2个单张,2对,1对,其他。
上午是输入一个数组,然后找出哪个比平均值大
1.手机号码合法性判断(20分)
问题描述:
我国大陆运营商的手机号码标准格式为:
国家码+手机号码,例如:
8613912345678。
特点如下:
1、长度13位;
2、以86的国家码打头;
3、手机号码的每一位都是数字。
请实现手机号码合法性判断的函数要求:
1)如果手机号码合法,返回0;
2)如果手机号码长度不合法,返回1
3)如果手机号码中包含非数字的字符,返回2;
4)如果手机号码不是以86打头的,返回3;
【注】除成功的情况外,以上其他合法性判断的优先级依次降低。
也就是说,如
果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。
要求实现函数:
intsintverifyMsisdn(char*inMsisdn)
【输入】char*inMsisdn,表示输入的手机号码字符串。
【返回】判断的结果,类型为int。
示例
inMsisdn=“869123456789“
无
返回:
1
inMsisdn=“88139123456789“
3
inMsisdn=“86139123456789“
0
2.将一个字符串的元音字母复制到另一个字符串,并排序(30分)
有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需
要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对
字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在
后,依次有序)。
说明:
1、元音字母是a,e,i,o,u,A,E,I,O,U。
2、筛选出来的元音字母,不需要剔重;
最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。
voidsortVowel(char*input,char*output);
【输入】char*input,表示输入的字符串
【输出】char*output,排好序之后的元音字符串。
char*input=“Abort!
MayBeSomeErrorsInOutSystem.“
char*output=“aeeeooAEIO“
3.身份证号码合法性判断
我国公民的身份证号码特点如下:
1、长度为18位;
2、第1~17位只能为数字;
3、第18位可以是数字或者小写英文字母x。
4、身份证号码的第7~14位表示持有人生日的年、月、日信息。
例如:
511002198808080111或511002198********x。
请实现身份证号码合法性判断的函数。
除满足以上要求外,需要对持有人生日的
年、月、日信息进行校验。
年份大于等于1900年,小于等于2100年。
需要考虑
闰年、大小月的情况。
所谓闰年,能被4整除且不能被100整除或能被400
整除的年份,闰年的2月份为29天,非闰年的2月份为28天。
其他情况的合法
性校验,考生不用考虑。
函数返回值:
1)如果身份证号合法,返回0;
2)如果身份证号长度不合法,返回1;
3)如果身份证号第1~17位含有非数字的字符,返回2;
4)如果身份证号第18位既不是数字也不是英文小写字母x,返回3;
5)如果身份证号的年信息非法,返回4;
6)如果身份证号的月信息非法,返回5;
7)如果身份证号的日信息非法,返回6(请注意闰年的情况);
intverifyIDCard(char*input)
”511002111222”,函数返回值:
1;
”511002abc123456789”,函数返回值:
2;
3)输入:
”51100219880808123a”,函数返回值:
3;
4)输入:
”511002188********4”,函数返回值:
4;
5)输入:
”511002198********4”,函数返回值:
5;
6)输入:
6;
7)输入:
”511002198902291234”,函数返回值:
7;
8)输入:
0;
第一个:
比较两个数组的元素是否相同
从后向前比较,直到比较完较短的一个数组为止。
出现不同元素就返
回0相同则返回1
第四题:
【2012】
1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。
intdelete_sub_str(constchar*str,constchar*sub_str,char*result)
assert(str!
=NULL&
sub_str!
=NULL);
constchar*p,*q;
char*t,*temp;
p=str;
q=sub_str;
t=result;
intn,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++;
}
}
free(temp);
returncount;
chars[100]={‘\0’};
intnum=delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);
printf(“Thenumberofsub_stris%d\r\n”,num);
printf(“Theresultstringis%s\r\n”,s);
2、约瑟夫环是一个数学的应用问题:
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;
他的下一个人又从1开始报数,数到m的那个人又出列;
依此规律重复下去,直到圆桌周围的人全部出列。
{
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;
=n;
q=(LinkList*)malloc(sizeof(LinkList));
q->
next=q;
p=q;
next=head;
/*使链表尾指向链表头形成循环链表*/
returnhead;
voidfun(LinkList*L,intm)
inti;
LinkList*p,*s,*q;
p=L;
printf("
出列顺序为:
while(p->
for(i=1;
{q=p;
p=p->
printf("
p->
num);
s=p;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 试题