华为认证 百分网手机站

华为上机试题

时间:2018-04-28 11:37:37 华为认证 我要投稿

华为上机试题汇总

  华为上机考试有哪些考点呢?下面跟yjbys小编一起来看看吧!希望这些上机试题能帮助大家顺利通过考试!

  地区一:

  1. 编写函数string deletestring(string str,string sub_str)从str中查找匹配的字符串sub_str,采用最左匹配,且输出形式为str+"_"+匹配的次数

  题目一的意思应该是求解字符串str中子字符串sub_str的个数,同时输出形式采用原字符串+"_"匹配次数

  相信大家第一反应应该是采用kmp,那么下面给出常规优化kmp程序如下(采用字符串数组形式):

  #include

  using namespace std;

  int next[100];

  void getnext(char b[])

  {

  int i=1,j=0; //ij

  next[1]=0;

  while(i<=strlen(b))

  {

  if(j==0||b[i-1]==b[j-1])

  {

  i++;

  j++;

  next[i]=j;

  }

  else j=next[j]; //

  }

  }

  int kmp(char a[],char b[])

  {

  int i=1,j=1; //i j

  while(i<=strlen(a)&&j<=strlen(b))

  {

  if(j==0||a[i-1]==b[j-1])

  {

  i++;

  j++;

  }

  else j=next[j];

  }

  if(j>strlen(b))

  return i-strlen(b);

  else return 0;

  }

  2. 高精度数相加,string addBigInt(string num1,string num2) 需要考虑正负数相加

  这道题是高精度计算中的最最简单的一题:

  目的是模拟人手工运算的过程,进而进行结果的`现实;

  参考代码(编译环境:Visual Studio 6):

  地区二:

  第一题【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中结果,题目仅仅让我们判断七种。但是这七种结果不具有继承性,所以我们设计一个好的程序。

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