华为上机试题汇总
华为上机试题汇总
华为上机考试有哪些考点呢?下面跟小编一起来看看吧!希望这些上机试题能帮助大家顺利通过考试!
地区一:
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):
地区二:
第一题:鉴定回文数组
给定一个数组判断是否是回文,这题没什么好说明,直接看代码:
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 }
第二题:求两个整型数组的异集,即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 }
第三题:判定德州扑克的牌型。给5张牌,返回它的牌型,4个的,3个+对子,顺子,3个+2个单张,2对,1对,其他。
德州扑克我还是很喜欢玩的`,其中牌型牌型可以有近10中结果,题目仅仅让我们判断七种。但是这七种结果不具有继承性,所以我们设计一个好的程序。
那么就要统一他们的表现形式,下面是我的思路:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yyfangchan@163.com (举报时请带上具体的网址) 举报,一经查实,本站将立刻删除