- 華為上機(jī)考試題 推薦度:
- 相關(guān)推薦
華為上機(jī)試題匯總
華為上機(jī)考試有哪些考點(diǎn)呢?下面跟yjbys小編一起來(lái)看看吧!希望這些上機(jī)試題能幫助大家順利通過(guò)考試!
地區(qū)一:
1. 編寫(xiě)函數(shù)string deletestring(string str,string sub_str)從str中查找匹配的字符串sub_str,采用最左匹配,且輸出形式為str+"_"+匹配的次數(shù)
題目一的意思應(yīng)該是求解字符串str中子字符串sub_str的個(gè)數(shù),同時(shí)輸出形式采用原字符串+"_"匹配次數(shù)
相信大家第一反應(yīng)應(yīng)該是采用kmp,那么下面給出常規(guī)優(yōu)化kmp程序如下(采用字符串?dāng)?shù)組形式):
#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. 高精度數(shù)相加,string addBigInt(string num1,string num2) 需要考慮正負(fù)數(shù)相加
這道題是高精度計(jì)算中的最最簡(jiǎn)單的一題:
目的是模擬人手工運(yùn)算的過(guò)程,進(jìn)而進(jìn)行結(jié)果的現(xiàn)實(shí);
參考代碼(編譯環(huán)境:Visual Studio 6):
地區(qū)二:
第一題【20分】:鑒定回文數(shù)組
給定一個(gè)數(shù)組判斷是否是回文,這題沒(méi)什么好說(shuō)明,直接看代碼:
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分】:求兩個(gè)整型數(shù)組的異集,即A+B-(A與B的交集)。
這里只是提供我的一個(gè)思路:
這個(gè)問(wèn)題的求解可以簡(jiǎn)化為統(tǒng)計(jì)數(shù)組A B中任何字符的個(gè)數(shù),A+B-(A與B的交集)的結(jié)果就是統(tǒng)計(jì)僅僅出現(xiàn)過(guò)一次的數(shù)字:
但是題目中沒(méi)有限制是字符,而是整形,數(shù)據(jù)量太大,這里借用了map操作,進(jìn)行簡(jiǎn)化內(nèi)存:
針對(duì)這個(gè)思路程序如下:
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個(gè)的,3個(gè)+對(duì)子,順子,3個(gè)+2個(gè)單張,2對(duì),1對(duì),其他。
德州撲克我還是很喜歡玩的,其中牌型牌型可以有近10中結(jié)果,題目?jī)H僅讓我們判斷七種。但是這七種結(jié)果不具有繼承性,所以我們?cè)O(shè)計(jì)一個(gè)好的程序。
那么就要統(tǒng)一他們的表現(xiàn)形式,下面是我的思路:
排序
判斷跳變次數(shù)
進(jìn)行篩選結(jié)果
這樣可以較為統(tǒng)一的處理各種結(jié)果,參考程序如下:
1 #include
2 #include
3 using namespace std;
4
5 struct Node{
6 char type;//0 1 2 3四種花色,可以考慮用enum類(lèi)型
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 //獲取每個(gè)的個(gè)數(shù)
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<<"不好意思,出了個(gè)順子"<
83 }
84 else
85 cout<<"五張單牌"<
86 }
87 }
88
89 //傳入大小為5的結(jié)構(gòu)體數(shù)組
90 //進(jìn)行判斷
91 int getType(Node* Nv)
92 {
93 //首先排序
94 sort(N,N+5,myCMP);
95 //提取個(gè)數(shù)
96 getN(Nv);
97 sort(n_of_v,n_of_v+5,myNCMP);
98
99 //根據(jù)n_數(shù)組進(jìn)行判斷
100
101 if(n_of_v[0]==4)
102 {
103 cout<<"四個(gè)一樣的哦"<
104 }
105
106 return 1;
107 }
108 int main()
109 {
110 getType(N);
111 showResult();
112 return 1;
113 }
【華為上機(jī)試題】相關(guān)文章:
2016年華為上機(jī)考試題08-27
word上機(jī)測(cè)試題及答案08-08
華為認(rèn)證考試試題及答案08-22
華為測(cè)試面試題匯總05-21
2017華為JAVA考試試題08-28
計(jì)算機(jī)二級(jí)VB上機(jī)試題及答案09-04
2017年華為筆試題及答案08-29
2016年華為機(jī)試題及答案08-22