华为上机试题及答案2DOC.docx

上传人:b****5 文档编号:11892079 上传时间:2023-04-08 格式:DOCX 页数:36 大小:170.11KB
下载 相关 举报
华为上机试题及答案2DOC.docx_第1页
第1页 / 共36页
华为上机试题及答案2DOC.docx_第2页
第2页 / 共36页
华为上机试题及答案2DOC.docx_第3页
第3页 / 共36页
华为上机试题及答案2DOC.docx_第4页
第4页 / 共36页
华为上机试题及答案2DOC.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

华为上机试题及答案2DOC.docx

《华为上机试题及答案2DOC.docx》由会员分享,可在线阅读,更多相关《华为上机试题及答案2DOC.docx(36页珍藏版)》请在冰豆网上搜索。

华为上机试题及答案2DOC.docx

华为上机试题及答案2DOC

目录

样题-初级题:

从考试成绩中划出及格线2

样题-中级题:

亮着电灯的盏数2

样题-高级题:

地铁换乘3

8.29去掉最大值、最小值之后剩下的个数3

8.29从5个人中选取2个人作为礼仪4

8.29验证括号是否匹配5

8.31回文数5

8.31将第一行中含有第二行中“23”的数输出并排序6

8.31翻译电话号码6

9.1.AM将整数倒序输出,剔除重复数据7

9.1.AM大数相减8

9.1.AM判断if语句括号是否合法8

9.1.PM8

9.1.PM9

9.1.PM9

样题-初级题:

从考试成绩中划出及格线 

10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:

(1) 及格线是10的倍数;

(2) 保证至少有60%的学生及格;

(3) 如果所有的学生都高于60分,则及格线为60分

#include

voidsort(inta[])

{

inti,j,t;

for(i=0;i<10;i++)

for(j=i+1;j<10;j++)

{

if(a[i]>a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

}

intmain()

{

intnum[10]={0};

scanf("%d%d%d%d%d%d%d%d%d%d",&num[0],&num[1],&num[2],&num[3],&num[4],&num[5],&num[6],&num[7],&num[8],&num[9]);

sort(num);

if(num[0]>60)

printf("60");

else

printf("%d",(num[4]/10)*10);

return0;

}

样题-中级题:

亮着电灯的盏数 

一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。

每盏电灯由一个拉线开关控制。

开始,电灯全部关着。

有n个学生从长廊穿过。

第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。

n个学生按此规定走完后,长廊里电灯有几盏亮着。

注:

电灯数和学生数一致。

#include

#defineMAX65535

intGetNum(intn)

{

inti,j,num=0;

chara[MAX]={0};

if((n<1)||(n>MAX))

return0;

for(i=1;i

for(j=1;j

{

if((j%i)==0)

{

a[j]+=1;

a[j]%=2;

}

}

for(i=1;i

{

if(1==a[i])

num++;

}

returnnum;

}

 

intmain()

{

inta;

scanf("%d",&a);

printf("%d",GetNum(a));

return0;

}

优化后:

#include

intmain()

{

inti,j,n;

intcnt=0;

scanf("%d",&n);

for(i=1;;i++)

{

j=i*i;

if(j>n)

break;

cnt++;

}

printf("%d",cnt);

return0;

}

样题-高级题:

地铁换乘

已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。

经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。

编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。

地铁线A(环线)经过车站:

A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18

地铁线B(直线)经过车站:

B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15

//描述:

已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。

经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。

编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。

//地铁线A(环线)经过车站:

A1A2A3A4A5A6A7A8A9T1A10A11A12A13T2A14A15A16A17A18

//地铁线B(直线)经过车站:

B1B2B3B4B5T1B6B7B8B9B1!

0T2B11B12B13B14B15

//输入:

输入两个不同的站名

//输出:

输出最少经过的站数及名称,含输入的起点和终点,换乘站点只计算一次

#include

#include

#include

#defineinf1000//定义无穷远距离

#definestanum35//定义总站台数

usingnamespacestd;

strings1[stanum]={"A1","A2","A3","A4","A5","A6","A7","A8","A9","A10",

"A11","A12","A13","A14","A15","A16","A17","A18",

"B1","B2","B3","B4","B5","B6","B7","B8","B9","B10",

"B11","B12","B13","B14","B15","T1","T2"};//记录车站的名字

voidfloyd(intdis[][stanum],intpath[][stanum])

{

//初始化path矩阵

for(introw=0;row

for(intcol=0;col

path[row][col]=row;

//找最短路径

for(intk=0;k

for(inti=0;i

for(intj=0;j

if(dis[i][j]>dis[i][k]+dis[k][j])

{

dis[i][j]=dis[i][k]+dis[k][j];

path[i][j]=path[k][j];

}

}

intstring2int(strings)//转换车站的名字到矩阵的索引

{

for(inti=0;i

if(s==s1[i])

{

returni;

break;

}

}

voidprintres(intdis[][stanum],intpath[][stanum],stringstart,stringdest)

{

cout<<"startstationtodestinationdistancepath"<

cout<<"\t"<"<

ints;

intd;

s=string2int(start);

d=string2int(dest);

cout<<"\t"<

for(inti=0;i

for(intj=0;j

{

if(i==s&&j==d)//输出路径

{

stackpathrout;//压栈

intk=j;

do

{

k=path[i][k];

pathrout.push(k);

}while(k!

=i);

//弹栈

cout<

pathrout.pop();

intlength=pathrout.size();

for(intt=0;t

{

cout<<"->"<

pathrout.pop();

}

cout<<"->"<

break;

}

}

}

intmain()

{

intdistance[stanum][stanum];

intpath[stanum][stanum];

stringstart;

stringdest;

//初始化连接矩阵

for(inti=0;i

{

for(intj=0;j

{

if(i==j)

distance[i][j]=0;

else

distance[i][j]=inf;

}

}

//初始化技巧

intsa[21]={0,1,2,3,4,5,6,7,8,33,9,10,11,12,34,13,14,15,16,17,0};

for(intm=0;m<20;m++)

{

distance[sa[m]][sa[m+1]]=1;

distance[sa[m+1]][sa[m]]=1;

}

intsb[17]={18,19,20,21,22,33,23,24,25,26,27,34,28,29,30,31,32};

for(intn=0;n<16;n++)

{

distance[sb[n]][sb[n+1]]=1;

distance[sb[n+1]][sb[n]]=1;

}

floyd(distance,path);

cout<<"inputstartanddestination"<

cin>>start>>dest;

printres(distance,path,start,dest);

system("pause");

return0;

}

8.29去掉最大值、最小值之后剩下的个数

1、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。

(其中最大值与最小值可能有多个)

Smpleinput:

3,3,5,3,6,9,7,9SampleoutPut:

3

#include

intmain()

{

inta[100]={0},n=0,temp,min,max,i,j,num=0;

charc='0';

n=0;

while(c!

='\n')

{

scanf("%d",&temp);

scanf("%c",&c);

a[n]=temp;

n++;

}

max=min=a[0];

for(i=0;i

{

a[i]=a[i*2];

}

for(i=0;i<(n+1)/2;i++)

{

if(a[i]>max)

max=a[i];

if(a[i]

min=a[i];

}

for(j=0;j<(n+1)/2;j++)

{

if((a[j]min))

num++;

}

printf("%d",num);

return0;

}

8.29从5个人中选取2个人作为礼仪

2、要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高。

Smpleinput:

161189167172188SampleoutPut:

188189

#include

#include

voidsort(inta[])

{

inti,j,temp;

for(i=0;i<5;i++)

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

{

if(a[i]

{

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

}

intmain()

{

inta[5]={0},b[4]={0};

inti,temp;

for(i=0;i<5;i++)

scanf("%d",&a[i]);

sort(a);

for(i=0;i<5;i++)

{

b[i]=abs(a[i+1]-a[i]);

}

temp=b[0];

for(i=0;i<4;i++)

{

if(temp>b[i])

temp=b[i];

}

for(i=0;i<4;i++)

{

if((b[i]==temp)&&a[i]>160&&a[i]<190)

printf("%d%d",a[i],a[i+1]);

}

 

return0;

}

8.29验证括号是否匹配

3、输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,']'),要求验证括号是否匹配,如果匹配则输出0、否则输出1.

Smpleinput:

dfa(sdf)df[dfds(dfd)]SmpleoutPut:

0

#include

intmain()

{

chara[100],c,i=0;

intflag=0;

scanf("%c",&c);

while(c!

='\n'&&flag==0)

{

switch(c)

{

case('('):

a[i]=c;

i++;

break;

case('['):

a[i]=c;

i++;

break;

case(')'):

if(a[i-1]=='(')

{

a[i-1]='\0';

i--;

}

else

flag=1;

break;

case(']'):

if(a[i-1]=='[')

{

a[i-1]='\0';

i--;

}

else

flag=1;

break;

}

scanf("%c",&c);

}

if(a[0]!

='\0')

printf("1");

else

printf("%d",flag);

return0;

}

8.31回文数

1.判断回文数,是返回1

#include

intmain()

{

intn,m=0,temp;

scanf("%d",&n);

temp=n;

while(temp>0)

{

m*=10;

m+=temp%10;

temp=temp/10;

}

if(m==n)

printf("1");

else

printf("0");

return0;

}

8.31将第一行中含有第二行中“23”的数输出并排序

2.输入一行数字:

123 423 5645 875 186523

在输入第二行:

23

将第一行中含有第二行中“23”的数输出并排序

结果即:

123 423 186523

#include

intmain()

{

inta[100]={0},temp,s,i=0,j;

charc='\0';

intsort[100],t=0;

while(c!

='\n')

{

scanf("%d%c",&temp,&c);

a[i]=temp;

i++;

}

scanf("%d",&s);

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

{

temp=a[j];

while(temp>0)

{

if(temp%100==s)

{

sort[t]=a[j];

t++;

break;

}

else

temp/=10;

}

}

for(i=0;i

for(j=0;j

if(sort[i]

{

temp=sort[i];

sort[i]=sort[j];

sort[j]=temp;

}

for(i=0;i

printf("%d",sort[i]);

return0;

}

8.31翻译电话号码

3.将 电话号码 one two 。

nine zero

翻译成1  2 。

9 0

中间会有double

例如输入:

OneTwoThree

输出:

123

输入:

OneTwoDoubleTwo

输出:

1222

输入:

1Two2输出:

ERROR

输入:

DoubleDoubleTwo输出:

ERROR

第三题:

有空格,非法字符,两个Double相连,Double位于最后一个单词都错误

#include

#include

intmain()

{

chara[11][11]={"zero","one","two","three","four","five","six","seven","eight","nine","double"};

chartemp[11];

charc='\0';

inti,d=0,f;//dmeansdoublefmeansfinal

while(c!

='\n')

{

scanf("%s%c",&temp,&c);

f=0;

for(i=0;i<11;i++)

{

if(!

strcmp(temp,a[i])&&i<10)

{

printf("%d",i);

f=1;

if(d==1)

{

printf("%d",i);

d=0;

}

}

elseif(!

strcmp(temp,a[i])&&i==10)

{

d=1;

f=1;

}

}

if(f==0)

break;

}

if(d==1||f==0)

printf("ERROR\n");

return0;

}

9.1.AM将整数倒序输出,剔除重复数据

输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321和571。

如果是负数,比如输入-175,输出-571。

#include

intmain()

{

intNum,n[50],a[10]={0},temp,i=0,flag=0;

charc;//a数组是剔除重复数字falg是防止首位输出0以及保证后面0的正常输出

scanf("%c",&c);

scanf("%d",&Num);

while(Num>0)

{

temp=Num%10;

if(a[temp]==0)

{

a[temp]=1;

n[i]=temp;

i++;

}

Num/=10;

}

if(c=='-')

printf("%c",c);

for(temp=0;temp

{

if(n[temp]!

=0||flag!

=0)

{

printf("%d",n[temp]);

flag=1;

}

}

temp=((int)c-48)-n[i-1];//判断头两个数字是否一样

if(c!

='-'&&temp!

=0)

printf("%d",(int)c-48);

return0;

}

9.1.AM大数相减

输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。

备注:

1、两个整数都是正整数,被减数大于减数

示例:

输入:

1000000000000001

1

输出:

1000000000000000

注意大数用chara[]存储,用%s接收,一位一位的运算。

注意a[0]里的正负号。

#include

#include

voiddec(char*d1,char*d2,char*out)

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

当前位置:首页 > PPT模板 > 艺术创意

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

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