2017華為認(rèn)證筆試題目
2017華為認(rèn)證筆試題目是怎樣的?以下是CN人才網(wǎng)小編整理的2017華為認(rèn)證筆試題目,歡迎閱讀參考!
2017華為認(rèn)證筆試題目一
第一題【20分】:鑒定回文數(shù)組
給定一個(gè)數(shù)組判斷是否是回文,這題沒什么好說明,直接看代碼:
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è)問題的求解可以簡(jiǎn)化為統(tǒng)計(jì)數(shù)組A B中任何字符的個(gè)數(shù),A+B-(A與B的交集)的結(jié)果就是統(tǒng)計(jì)僅僅出現(xiàn)過一次的數(shù)字:
但是題目中沒有限制是字符,而是整形,數(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類型
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 }
2017華為認(rèn)證筆試題目二
1、通過鍵盤輸入100以內(nèi)正整數(shù)的加、減運(yùn)算式,請(qǐng)編寫一個(gè)程序輸出運(yùn)算結(jié)果字符串。
輸入字符串的格式為:“操作數(shù)1 運(yùn)算符 操作數(shù)2”,“操作數(shù)”與“運(yùn)算符”之間以一個(gè)空格隔開。
補(bǔ)充說明:
1. 操作數(shù)為正整數(shù),不需要考慮計(jì)算結(jié)果溢出的情況。
2. 若輸入算式格式錯(cuò)誤,輸出結(jié)果為“0”。
要求實(shí)現(xiàn)函數(shù):
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
【輸入】 pInputStr: 輸入字符串
lInputLen: 輸入字符串長(zhǎng)度
【輸出】 pOutputStr: 輸出字符串,空間已經(jīng)開辟好,與輸入字符串等長(zhǎng);
【注意】只需要完成該函數(shù)功能算法,中間不需要有任何IO的輸入輸出
示例
輸入:“4 + 7” 輸出:“11”
輸入:“4 - 7” 輸出:“-3”
輸入:“9 ++ 7” 輸出:“0” 注:格式錯(cuò)誤
復(fù)制代碼
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 }
復(fù)制代碼
2、手機(jī)號(hào)碼合法性判斷(20分)
問題描述:
我國(guó)大陸運(yùn)營(yíng)商的手機(jī)號(hào)碼標(biāo)準(zhǔn)格式為:國(guó)家碼+手機(jī)號(hào)碼,例如:8613912345678。特點(diǎn)如下:
1、 長(zhǎng)度13位;
2、 以86的國(guó)家碼打頭;
3、 手機(jī)號(hào)碼的每一位都是數(shù)字。
請(qǐng)實(shí)現(xiàn)手機(jī)號(hào)碼合法性判斷的.函數(shù)(注:考生無(wú)需關(guān)注手機(jī)號(hào)碼的真實(shí)性,也就是說諸如86123123456789這樣的手機(jī)號(hào)碼,我們也認(rèn)為是合法的),要求:
1) 如果手機(jī)號(hào)碼合法,返回0;
2) 如果手機(jī)號(hào)碼長(zhǎng)度不合法,返回1
3) 如果手機(jī)號(hào)碼中包含非數(shù)字的字符,返回2;
4) 如果手機(jī)號(hào)碼不是以86打頭的,返回3;
【注】除成功的情況外,以上其他合法性判斷的優(yōu)先級(jí)依次降低。也就是說,如果判斷出長(zhǎng)度不合法,直接返回1即可,不需要再做其他合法性判斷。
要求實(shí)現(xiàn)函數(shù):
int verifyMsisdn(char* inMsisdn)
【輸入】 char* inMsisdn,表示輸入的手機(jī)號(hào)碼字符串。
【輸出】 無(wú)
【返回】 判斷的結(jié)果,類型為int。
示例
輸入: inMsisdn = “869123456789“
輸出: 無(wú)
返回: 1
輸入: inMsisdn = “88139123456789“
輸出: 無(wú)
返回: 3
輸入: inMsisdn = “86139123456789“
輸出: 無(wú)
返回: 0
復(fù)制代碼
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 }
復(fù)制代碼
3、將一個(gè)字符串的元音字母復(fù)制到另一個(gè)字符串,并排序(30分)
問題描述:
有一字符串,里面可能包含英文字母(大寫、小寫)、數(shù)字、特殊字符,現(xiàn)在需要實(shí)現(xiàn)一函數(shù),將此字符串中的元音字母挑選出來,存入另一個(gè)字符串中,并對(duì)字符串中的字母進(jìn)行從小到大的排序(小寫的元音字母在前,大寫的元音字母在后,依次有序)。
說明:
1、 元音字母是a,e,i,o,u,A,E,I,O,U。
2、 篩選出來的元音字母,不需要剔重(chong);
最終輸出的字符串,小寫元音字母排在前面,大寫元音字母排在后面,依次有序。
要求實(shí)現(xiàn)函數(shù):
void sortVowel (char* input, char* output);
【輸入】 char* input,表示輸入的字符串
【輸出】 char* output,排好序之后的元音字符串。
【返回】 無(wú)
示例
輸入:char *input = “Abort!May Be Some Errors In Out System. “
輸出:char *output =“aeeeooouAEIO “
復(fù)制代碼
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 }
復(fù)制代碼
4、我國(guó)公民的身份證號(hào)碼特點(diǎn)如下:
1、 長(zhǎng)度為18位;
2、 第1~17位只能為數(shù)字;
3、 第18位可以是數(shù)字或者小寫英文字母x。
4、 身份證號(hào)碼的第7~14位表示持有人生日的年、月、日信息。
例如:511002198808080111或51100219880808011x。
請(qǐng)實(shí)現(xiàn)身份證號(hào)碼合法性判斷的函數(shù)。除滿足以上要求外,需要對(duì)持有人生日的年、月、日信息進(jìn)行校驗(yàn)。年份大于等于1900年,小于等于2100年。 需要考慮閏年、大小月的情況。所謂閏年,能被4整除且不能被100整除 或 能被400整除的年份,閏年的2月份為29天,非閏年的2月份為28天。其他情況的合法性校驗(yàn),考生不用考慮。
函數(shù)返回值:
1) 如果身份證號(hào)合法,返回0;
2) 如果身份證號(hào)長(zhǎng)度不合法,返回1;
3) 如果身份證號(hào)第1~17位含有非數(shù)字的字符,返回2;
4) 如果身份證號(hào)第18位既不是數(shù)字也不是英文小寫字母x,返回3;
5) 如果身份證號(hào)的年信息非法,返回4;
6) 如果身份證號(hào)的月信息非法,返回5;
7) 如果身份證號(hào)的日信息非法,返回6(請(qǐng)注意閏年的情況);
【注】除成功的情況外,以上其他合法性判斷的優(yōu)先級(jí)依次降低。也就是說,如果判斷出長(zhǎng)度不合法,直接返回1即可,不需要再做其他合法性判斷。
要求實(shí)現(xiàn)函數(shù):
int verifyIDCard(char* input)
【輸入】 char* input,表示輸入的身份證號(hào)碼字符串
【輸出】 無(wú)
【返回】 判斷的結(jié)果,類型為int
示例
1) 輸入:”511002111222”,函數(shù)返回值:1;
2) 輸入:”511002abc123456789”,函數(shù)返回值:2;
3) 輸入:”51100219880808123a”,函數(shù)返回值:3;
4) 輸入:”511002188808081234”,函數(shù)返回值:4;
【2017華為認(rèn)證筆試題目】相關(guān)文章:
華為筆試經(jīng)驗(yàn)及題目05-08
華為認(rèn)證筆試試題及答案04-06
華為HCNA-HNTD認(rèn)證筆試經(jīng)驗(yàn)04-05
華為hcna認(rèn)證筆試試題及答案04-04
2017華為筆試真題03-30