华为上机试题汇总

华为上机考试有哪些考点呢?下面跟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=th();

7 int i=0;

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

9 {

10 if((i)!=(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 r();

17 for(int i=0;i

18 {

19 mit=(a[i]);

20 if(mit!=())

21 {

22 mit->second++;

23 }

24 else

25 {

26 rt(make_pair(a[i],1));

27 }

28 }

29

30 for(i=0;i

31 {

32 mit=(b[i]);

33 if(mit!=())

34 {

35 mit->second++;

36 }

37 else

38 {

39 rt(make_pair(b[i],1));

40 }

41 }

42

43 for(mit=n(),i=0;mit!=();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中结果,题目仅仅让我们判断七种。但是这七种结果不具有继承性,所以我们设计一个好的程序。

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