我要投稿 投诉建议

华为认证笔试题目

时间:2021-02-21 14:58:18 笔试题目 我要投稿

2017华为认证笔试题目

  2017华为认证笔试题目是怎样的?以下是CN人才网小编整理的2017华为认证笔试题目,欢迎阅读参考!

2017华为认证笔试题目

  2017华为认证笔试题目一

  第一题【20分】:鉴定回文数组

  给定一个数组判断是否是回文,这题没什么好说明,直接看代码:

  1 #include

  2 using namespace std;

  3

  4 bool isHuiWen(string s)

  5 {

  6 int length_s=s.length();

  7 int i=0;

  8 for(i=0;i<(length_s>>1);i++)

  9 {

  10 if(s.at(i)!=s.at(length_s-1-i))

  11 return false;

  12 }

  13 return true;

  14 }

  15

  16 int main()

  17 {

  18 string ss="iloveevolis";

  19 if(isHuiWen(ss))

  20 {

  21 cout<<"Huiwen"<

  22 }

  23 else

  24 {

  25 cout<<"No"<

  26 }

  27 return 1;

  28 }

  第二题【30分】:求两个整型数组的异集,即A+B-(A与B的交集)。

  这里只是提供我的一个思路:

  这个问题的求解可以简化为统计数组A B中任何字符的个数,A+B-(A与B的交集)的结果就是统计仅仅出现过一次的数字:

  但是题目中没有限制是字符,而是整形,数据量太大,这里借用了map操作,进行简化内存:

  针对这个思路程序如下:

  1 #include

  2 #include

  3 using namespace std;

  4

  5 map mi;

  6 map::iterator mit;

  7 int A[10]={1,2,3,4,5,6,3,2,8,9};

  8 int B[10]={8,7,6,5,9,0,3,4,8,40};

  9 int R[20];

  10 int RC=0;

  11

  12

  13 void getAB(int* a,int na,int* b,int nb)

  14 {

  15 string re;

  16 mi.clear();

  17 for(int i=0;i

  18 {

  19 mit=mi.find(a[i]);

  20 if(mit!=mi.end())

  21 {

  22 mit->second++;

  23 }

  24 else

  25 {

  26 mi.insert(make_pair(a[i],1));

  27 }

  28 }

  29

  30 for(i=0;i

  31 {

  32 mit=mi.find(b[i]);

  33 if(mit!=mi.end())

  34 {

  35 mit->second++;

  36 }

  37 else

  38 {

  39 mi.insert(make_pair(b[i],1));

  40 }

  41 }

  42

  43 for(mit=mi.begin(),i=0;mit!=mi.end();mit++)

  44 {

  45 if(mit->second==1)

  46 {

  47 R[i++]=mit->first;

  48 }

  49 }

  50 RC=i;

  51 }

  52

  53 int main()

  54 {

  55 getAB(A,10,B,10);

  56 for(int i=0;i

  57 {

  58 cout<

  59 }

  60 return 1;

  61 }

  第三题【50分】:判定德州扑克的牌型。给5张牌,返回它的牌型,4个的,3个+对子,顺子,3个+2个单张,2对,1对,其他。

  德州扑克我还是很喜欢玩的,其中牌型牌型可以有近10中结果,题目仅仅让我们判断七种。但是这七种结果不具有继承性,所以我们设计一个好的程序。

  那么就要统一他们的表现形式,下面是我的思路:

  排序

  判断跳变次数

  进行筛选结果

  这样可以较为统一的处理各种结果,参考程序如下:

  1 #include

  2 #include

  3 using namespace std;

  4

  5 struct Node{

  6 char type;//0 1 2 3四种花色,可以考虑用enum类型

  7 int v;//面值

  8 };

  9

  10 Node N[5]={

  11 {0,5},

  12 {0,9},

  13 {0,2},

  14 {0,9},

  15 {0,9},

  16 };

  17

  18 int n_of_v[5]={0,0,0,0,0};

  19

  20 bool myCMP(Node& a,Node& b)

  21 {

  22 return a.v>b.v;

  23 }

  24

  25 bool myNCMP(int a,int b)

  26 {

  27 return a>b;

  28 }

  29

  30 //获取每个的个数

  31 int getN(Node* Nv)

  32 {

  33 int i=0;

  34 int j=0;

  35 int n=1;

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

  37 {

  38 if(Nv[i].v==Nv[i+1].v)

  39 {

  40 n++;

  41 }

  42 else

  43 {

  44 n_of_v[j++]=n;

  45 n=1;

  46 }

  47 }

  48 n_of_v[j++]=n;

  49 return j;

  50 }

  51

  52 void showResult()

  53 {

  54 if(n_of_v[0]==4)

  55 {

  56 cout<<"4+1"<

  57 }

  58 else if(n_of_v[0]==3&&n_of_v[1]==2)

  59 {

  60 cout<<"3+2"<

  61 }

  62 else if(n_of_v[0]==3&&n_of_v[1]==1)

  63 {

  64 cout<<"3+1+1"<

  65 }

  66 else if(n_of_v[0]==2&&n_of_v[1]==2)

  67 {

  68 cout<<"2+2+1"<

  69 }

  70 else if(n_of_v[0]==2&&n_of_v[1]==1)

  71 {

  72 cout<<"2+1+1+1"<

  73 }

  74 else if(n_of_v[0]==1)

  75 {

  76 //可能是顺子

  77 if(N[0].v==N[1].v+1

  78 &&N[1].v==N[2].v+1

  79 &&N[2].v==N[3].v+1

  80 &&N[3].v==N[4].v+1)

  81 {

  82 cout<<"不好意思,出了个顺子"<

  83 }

  84 else

  85 cout<<"五张单牌"<

  86 }

  87 }

  88

  89 //传入大小为5的结构体数组

  90 //进行判断

  91 int getType(Node* Nv)

  92 {

  93 //首先排序

  94 sort(N,N+5,myCMP);

  95 //提取个数

  96 getN(Nv);

  97 sort(n_of_v,n_of_v+5,myNCMP);

  98

  99 //根据n_数组进行判断

  100

  101 if(n_of_v[0]==4)

  102 {

  103 cout<<"四个一样的哦"<

  104 }

  105

  106 return 1;

  107 }

  108 int main()

  109 {

  110 getType(N);

  111 showResult();

  112 return 1;

  113 }

  2017华为认证笔试题目二

  1、通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。

  输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。

  补充说明:

  1. 操作数为正整数,不需要考虑计算结果溢出的情况。

  2. 若输入算式格式错误,输出结果为“0”。

  要求实现函数:

  void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);

  【输入】 pInputStr: 输入字符串

  lInputLen: 输入字符串长度

  【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

  【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

  示例

  输入:“4 + 7” 输出:“11”

  输入:“4 - 7” 输出:“-3”

  输入:“9 ++ 7” 输出:“0” 注:格式错误

  复制代码

  1 void arithmetic(const char *pInputStr,long lInputLen,char *pOutputStr)

  2 {

  3 assert(pInputStr!=NULL && pOutputStr!=NULL && lInputLen>0);

  4 int iOperand1=0;

  5 int iOperand2=0;

  6 char cSymbol;

  7 long i;

  8 for (i=0;;i++)

  9 {

  10 if (pInputStr[i]>='0' && pInputStr[i]<='9')

  11 {

  12 iOperand1=iOperand1*10+(pInputStr[i]-'0');

  13 }

  14 else if (pInputStr[i]==' ')

  15 {

  16 break;

  17 }

  18 else

  19 {

  20 return;

  21 }

  22 }

  23

  24 for (++i;;i++)

  25 {

  26 if (pInputStr[i]=='+' || pInputStr[i]=='-')

  27 {

  28 cSymbol=pInputStr[i];

  29 }

  30 else if (pInputStr[i]==' ')

  31 {

  32 break;

  33 }

  34 else

  35 {

  36 return;

  37 }

  38 }

  39

  40 for (++i;i

  41 {

  42 if (pInputStr[i]>='0' && pInputStr[i]<='9')

  43 {

  44 iOperand2=iOperand2*10+(pInputStr[i]-'0');

  45 }

  46 else

  47 {

  48 break;

  49 }

  50 }

  51 int iTemp;

  52 switch(cSymbol)

  53 {

  54 case '+':

  55 iTemp=iOperand1+iOperand2;

  56 break;

  57 case '-':

  58 iTemp=iOperand1-iOperand2;

  59 break;

  60 default:

  61 break;

  62 }

  63

  64 int k=0;

  65 if (iTemp<0)

  66 {

  67 iTemp=-iTemp;

  68 pOutputStr[0]='-';

  69 k++;

  70 }

  71

  72 char cTemp[10];

  73 itoa(iTemp,cTemp,10);

  74 int j=0;

  75 while(cTemp[j])

  76 {

  77 pOutputStr[k++]=cTemp[j++];

  78 }

  79

  80 pOutputStr[k]='\0';

  81

  82 }

  复制代码

  2、手机号码合法性判断(20分)

  问题描述:

  我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:

  1、 长度13位;

  2、 以86的国家码打头;

  3、 手机号码的每一位都是数字。

  请实现手机号码合法性判断的.函数(注:考生无需关注手机号码的真实性,也就是说诸如86123123456789这样的手机号码,我们也认为是合法的),要求:

  1) 如果手机号码合法,返回0;

  2) 如果手机号码长度不合法,返回1

  3) 如果手机号码中包含非数字的字符,返回2;

  4) 如果手机号码不是以86打头的,返回3;

  【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。

  要求实现函数:

  int verifyMsisdn(char* inMsisdn)

  【输入】 char* inMsisdn,表示输入的手机号码字符串。

  【输出】 无

  【返回】 判断的结果,类型为int。

  示例

  输入: inMsisdn = “869123456789“

  输出: 无

  返回: 1

  输入: inMsisdn = “88139123456789“

  输出: 无

  返回: 3

  输入: inMsisdn = “86139123456789“

  输出: 无

  返回: 0

  复制代码

  1 int verifyMsisdn(char *inMsisdn)

  2 {

  3 assert(inMsisdn!=NULL);

  4

  5 int iLen=strlen(inMsisdn);

  6 if (iLen!=13)

  7 {

  8 return 1;

  9 }

  10

  11 for (int i=0;i

  12 {

  13 if (inMsisdn[i]<'0' || inMsisdn[i]>'9')

  14 {

  15 return 2;

  16 }

  17 }

  18

  19 if (inMsisdn[0]!='8' || inMsisdn[1]!='6')

  20 {

  21 return 3;

  22 }

  23

  24 return 0;

  25

  26 }

  复制代码

  3、将一个字符串的元音字母复制到另一个字符串,并排序(30分)

  问题描述:

  有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。

  说明:

  1、 元音字母是a,e,i,o,u,A,E,I,O,U。

  2、 筛选出来的元音字母,不需要剔重(chong);

  最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。

  要求实现函数:

  void sortVowel (char* input, char* output);

  【输入】 char* input,表示输入的字符串

  【输出】 char* output,排好序之后的元音字符串。

  【返回】 无

  示例

  输入:char *input = “Abort!May Be Some Errors In Out System. “

  输出:char *output =“aeeeooouAEIO “

  复制代码

  1 void sortVowel(char *pInput,char *pOutput)

  2 {

  3 assert(pInput!=NULL && pOutput!=NULL);

  4

  5 int iLen=strlen(pInput);

  6 char *pSmall=new char[iLen+1];

  7 char *pLarge=new char[iLen+1];

  8

  9 int iSmallCount=0;

  10 int iLargeCount=0;

  11

  12 for (int i=0;i

  13 {

  14 if (pInput[i]=='a' || pInput[i]=='e' || pInput[i]=='i' || pInput[i]=='o' || pInput[i]=='u')

  15 {

  16 pSmall[iSmallCount++]=pInput[i];

  17

  18 }

  19 else if (pInput[i]=='A' || pInput[i]=='E' || pInput[i]=='I' || pInput[i]=='O' || pInput[i]=='U')

  20 {

  21 pLarge[iLargeCount++]=pInput[i];

  22 }

  23 }

  24

  25 sort(pSmall,pSmall+iSmallCount);

  26 sort(pLarge,pLarge+iLargeCount);

  27

  28 int j,k=0;

  29 for (j=0;j

  30 {

  31 pOutput[k++]=pSmall[j];

  32 }

  33 for (j=0;j

  34 {

  35 pOutput[k++]=pLarge[j];

  36 }

  37

  38 pOutput[k]='\0';

  39

  40 delete []pSmall;

  41 delete []pLarge;

  42 }

  复制代码

  4、我国公民的身份证号码特点如下:

  1、 长度为18位;

  2、 第1~17位只能为数字;

  3、 第18位可以是数字或者小写英文字母x。

  4、 身份证号码的第7~14位表示持有人生日的年、月、日信息。

  例如:511002198808080111或51100219880808011x。

  请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。年份大于等于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(请注意闰年的情况);

  【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。

  要求实现函数:

  int verifyIDCard(char* input)

  【输入】 char* input,表示输入的身份证号码字符串

  【输出】 无

  【返回】 判断的结果,类型为int

  示例

  1) 输入:”511002111222”,函数返回值:1;

  2) 输入:”511002abc123456789”,函数返回值:2;

  3) 输入:”51100219880808123a”,函数返回值:3;

  4) 输入:”511002188808081234”,函数返回值:4;

【2017华为认证笔试题目】相关文章:

华为认证笔试经验04-02

2017华为认证笔试试题练习04-02

华为笔试经验及题目05-08

华为认证笔试试题及答案04-06

华为HCNA-HNTD认证笔试经验04-05

华为hcna认证笔试试题及答案04-04

2017华为笔试真题03-30

华为笔试经验分享201703-30

华为认证网络工程师笔试经验02-26