华为机试试题汇总Word格式文档下载.docx
- 文档编号:19505198
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:37
- 大小:25.31KB
华为机试试题汇总Word格式文档下载.docx
《华为机试试题汇总Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《华为机试试题汇总Word格式文档下载.docx(37页珍藏版)》请在冰豆网上搜索。
3.。
,则输出。
char*num1,*num2;
过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:
voidstringFilter(constchar*pInputStr,longlInputLen,char*pOutputStr);
【输入】pInputStr:
输入字符串
lInputLen:
输入字符串长度
【输出】pOutputStr:
输出字符串,空间已经开辟好,与输入字符串等长;
#include<
voidstringFilter(constchar*p_str,longlen,char*p_outstr)
intarray[256]={0};
constchar*tmp=p_str;
for(intj=0;
len;
if(array[tmp[j]]==0)
*p_outstr++=tmp[j];
array[tmp[j]]++;
*p_outstr='
\0'
;
voidmain()
char*str="
cccddecc"
intlen=strlen(str);
char*outstr=(char*)malloc(len*sizeof(char));
stringFilter(str,len,outstr);
%s\n"
outstr);
free(outstr);
outstr=NULL;
4.通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1.仅压缩连续重复出现的字符。
比如字符串"
abcbc"
由于无连续重复字符,压缩后的字符串还是"
.
2.压缩字段的格式为"
字符重复的次数+字符"
例如:
字符串"
xxxyyyyyyz"
压缩后就成为"
3x6yz"
voidstringZip(constchar*pInputStr,longlInputLen,char*pOutputStr);
输入字符串
输出字符串,空间已经开辟好,与输入字符串等长;
voidstringZip(constchar*p_str,longlen,char*p_outstr)
intcount=1;
for(inti=0;
if(p_str[i]==p_str[i+1])
count++;
else
if(count>
1)
*p_outstr++=count+'
0'
*p_outstr++=p_str[i];
count=1;
过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:
“操作数1运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:
1.操作数为正整数,不需要考虑计算结果溢出的情况。
2.若输入算式格式错误,输出结果为“0”。
voidarithmetic(constchar*pInputStr,longlInputLen,char*pOutputStr);
voidarithmetic(constchar*input,longlen,char*output)
chars1[10];
chars2[10];
chars3[10];
intcnt=0;
intlen_input=strlen(input);
len_input;
++i)
if(input[i]=='
'
)
cnt++;
if(cnt!
=2)
*output++='
*output='
return;
sscanf(input,"
%s%s%s"
s1,s2,s3);
if(strlen(s2)!
=1||(s2[0]!
='
+'
&
s2[0]!
-'
))
intlen_s1=strlen(s1);
len_s1;
if(s1[i]<
||s1[i]>
9'
intlen_s3=strlen(s3);
len_s3;
if(s3[i]<
||s3[i]>
intx=atoi(s1);
inty=atoi(s3);
if(s2[0]=='
intresult=x+y;
itoa(result,output,10);
elseif(s2[0]=='
intresult=x-y;
itoa(result,output,10);
charstr[]={"
10-23"
};
charoutstr[10];
arithmetic(str,len,outstr);
str);
6.一组人(n个),围成一圈,从某人开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人
(约瑟夫环是一个数学的应用问题:
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;
他的下一个人又从1开始报数,数到m的那个人又出列;
依此规律重复下去,直到圆桌周围的人全部出列。
typedefstructNode
intdata;
structNode*next;
}LinkList;
LinkList*create(intn)
LinkList*p,*q,*head;
inti=1;
p=(LinkList*)malloc(sizeof(LinkList));
p->
data=i;
head=p;
for(i=1;
=n;
q=(LinkList*)malloc(sizeof(LinkList));
q->
data=i+1;
next=q;
p=q;
next=head;
输入一串字符,只包含“0-10”和“,”找出其中最小的数字和最大的数字(可能不止一个),输出最后剩余数字个数。
如输入“3,3,4,5,6,7,7”
charstr[100];
输入一组字符串:
\n"
%s"
str);
intlen=strlen(str);
intarray[100];
intcount=0;
if(str[i]>
str[i]<
array[count++]=str[i]-'
array[count]='
intresult=count;
intmin=array[0];
intmax=array[0];
count;
if(max<
array[j])
max=array[j];
elseif(min>
min=array[j];
for(intk=0;
k<
k++)
if(array[k]==min)
result--;
if(array[k]==max)
result);
8.输入一组身高在170到190之间(5个身高),比较身高差,选出身高差最小的两个身高;
若身高差相同,选平均身高高的那两个身高;
从小到大输出;
如输入170181173186190输出170173
#defineN5
intmain()
intHeight[N];
intdmin;
intH1,H2;
inti,j,temp;
请输入一组身高在170到190之间的数据(共5个):
N;
Height[k]);
for(j=1;
N-i&
Height[j-1]>
Height[j];
temp=Height[j-1];
Height[j-1]=Height[j];
Height[j]=temp;
H1=Height[0];
H2=Height[1];
dmin=H2-H1;
for(intm=2;
m<
m++)
if(Height[m]-Height[m-1]<
=dmin)
H1=Height[m-1];
H2=Height[m];
dmin=Height[m]-Height[m-1];
身高差最小的两个身高为:
%d,%d\n"
H1,H2);
9.删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。
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)
p=p+n;
*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);
10.要求编程实现上述高精度的十进制加法。
voidadd(constchar*num1,constchar*num2,char*result)
【输入】num1:
字符串形式操作数1,如果操作数为负,则num1[0]为符号位'
num2:
字符串形式操作数2,如果操作数为负,则num2[0]为符号位'
【输出】result:
保存加法计算结果字符串,如果结果为负,则result[0]为符号位。
voidmove(char*str,intlength)描述:
10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:
(1)及格线是10的倍数;
(2)保证至少有60%的学生及格;
(3)如果所有的学生都高于60分,则及格线为60分
输入:
输入10个整数,取值0~100
输出:
输出及格线,10的倍数
voidbubblesort(intarr[])
10;
for(j=0;
9-i&
arr[j]>
arr[j+1];
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
intGetPassLine(inta[])
bubblesort(a);
if(a[0]>
=60)
return60;
return(((int)a[4]/10)*10);
inta[10]={0};
intresult;
请随机输入10个成绩(0-100):
%d%d%d%d%d%d%d%d%d%d"
a[0],&
a[1],&
a[2],&
a[3],&
a[4],&
a[5],&
a[6],&
a[7],&
a[8],&
a[9]);
result=GetPassLine(a);
及格线为:
return1;
12.描述:
一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1、2、3、…n-1、n。
每盏电灯由一个拉线开关控制。
开始,电灯全部关着。
有n个学生从长廊穿过。
第一个学生把号码凡是1的倍数的电灯的开关拉一下;
接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;
接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;
如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。
n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:
电灯数和学生数一致。
电灯的数量
亮着的电灯数量
样例输入:
3
样例输出:
1
#defineMax_Bubl_Num65535
intGetLightLampNum(intn)
intBublNum[Max_Bubl_Num]={0};
描述:
已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。
经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。
编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。
地铁线A(环线)经过车站:
A1A2A3A4A5A6A7A8A9T1A10A11A12A13T2A14A15A16A17A18地铁线B(直线)经过车站:
B1B2B3B4B5T1B6B7B8B9B10T2B11B12B13B14B15
输入两个不同的站名
输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次
输入样例:
A1A3
输出样例:
string>
queue>
vector>
usingnamespacestd;
#defineMAX35
#defineSUBWAY_A20
#defineSUBWAY_B15
typedefstructnode{
intadjvex;
structnode*next;
}edgenode;
typedefstruct{
charname[10];
boolflag;
edgenode*link;
}vexnode;
constcharsubway_name1[SUBWAY_A][10]={"
A1"
"
A2"
A3"
A4"
A5"
A6"
A7"
A8"
A9"
T1"
A10"
A11"
A12"
A13"
T2"
A14"
A15"
A16"
A17"
A18"
constcharsubway_name2[SUBWAY_B][10]={"
B1"
B2"
B3"
B4"
B5"
B6"
B7"
B8"
B9"
B10"
B11"
B12"
B13"
B14"
B15"
voidcreat(vexnodega[]){
inti;
edgenode*p;
for(i=0;
MAX;
i++){
ga[i].link=NULL;
ga[i].flag=true;
if(i<
SUBWAY_A)strcpy(ga[i].name,subway_name1[i]);
elsestrcpy(ga[i].name,subway_name2[i-20]);
ink=p;
p=(edgenode*)malloc(sizeof(edgenode));
adjvex=i+1;
next=NULL;
ga[i].link->
next=p;
if(i==9){
p->
adjvex=SUBWAY_A+4;
next->
adjvex=SUBWAY_A+5;
ga[i].link->
elseif(i==14){
adjvex=SUBWAY_A+9;
adjvex=SUBWAY_A+10;
adjvex=SUBWAY_A-1;
ga[0].link=p;
adjvex=1;
ga[0].link->
adjvex=SUBWAY_A-2;
ga[SUBWAY_A-1].link=p;
adjvex=0;
ga[SUBWAY_A-1].link->
adjvex=SUBWAY_A+i+1;
ga[i+SUBWAY_A].link->
adjvex=SUBWAY_A+3;
ga[SUBWAY_A+4].link=p;
adjvex=9;
ga[SUBWAY_A+4].link->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 试试 汇总
![提示](https://static.bdocx.com/images/bang_tan.gif)