華為2014機試題(一)

2022-02-13 08:21:05 字數 1602 閱讀 7692

過幾天就要進行華為的機試了,今兒臨時抱抱佛腳,在網上找到2014屆華為校招的機試題,琢磨了一會兒,貼出來記錄下。

首先感謝一下hackbuteer提供的題目:

對於第一題,字元過濾。最簡單也是最直接的就是hash。題目規定了輸入序列只能為小寫字元'a~z'。因此直接開闢乙個大小為26的陣列用於記錄當前字元是否已經出現即可。

需要注意的問題:

1. hash陣列記得初始化

2. poutputstr為字元指標,記得在結尾『\0』。以免stackoverflow。

保險起見,可以在函式起始對poutputstr初始化,memset(poutputstr,0,sizeof(poutputstr));

第二題 字串壓縮,整理題意之後,就是將連續出現的字元進行個數統計,如果大於1,則先將重複長度輸出,然後將該字元輸出。

需要注意的問題:

1. 某個重複字元的長度可能超過10,甚至1000,考慮itoa。

char buffer[1000];

memset(buffer,0,sizeof(buffer));

itoa(num,buffer,10);

2. 如果某字元並未重複,即個數為1,不需要在poutputstr中輸出『1x』, 'x'--表示該字元。

3. poutputstr 結尾。

第三題 我的思路和hackbuteer不太一樣,我的思路傾向於流程控制,寫的有點冗餘。

1

void setoutput(char *poutputstr)26

void arithmetic(const

char *pinputstr, long linputlen, char *poutputstr)731

if(fnum==false || i==linputlen)

3236

//get first space

37if(pinputstr[i]== '')

3842

if(fspace==false || i==linputlen)

4347

//get operator +/-

48if(pinputstr[i]== '

+'|| pinputstr[i]=='-'

)4955if(op==false || i==linputlen)

5660

//get second space

61if(pinputstr[i]== '')

6266

if(sspace==false || i==linputlen)

6771

//get second num

72while(i='

0'&& pinputstr[i]<='9'

)7378if(snum==false || i7983

if(mark==1) num1+=num2;

84else num1-=num2;

85 memset(buffer,0,sizeof

(buffer));

86 itoa(num1,buffer,10

);87

strcpy(poutputstr,buffer);

88 }

華為2014校園招聘機試題

一條長廊裡依次裝有n 1 n 65535 盞電燈,從頭到尾編號1 2 3 n 1 n。每盞電燈由乙個拉線開關控制。開始,電燈全部關著。有n個學生從長廊穿過。第乙個學生把號碼凡是1的倍數的電燈的開關拉一下 接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下 接著第三個學生把號碼凡是3的倍數的電燈的開關...

2014校園招聘 華為機試題

1,亮著電燈的盞數 一條長廊裡依次裝有n 1 n 65535 盞電燈,從頭到尾編號1 2 3 n 1 n。每盞電燈由乙個拉線開關控制。開始,電燈全部關著。有n個學生從長廊穿過。第乙個學生把號碼凡是1的倍數的電燈的開關拉一下 接著第二個學生把號碼凡是2的倍數的電燈的開關拉一下 接著第三個學生把號碼凡是...

華為機試題 2014校園招聘

1 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串過濾程式,若字串中出現多個相同的字元,將非首次出現的字元過濾掉。比如字串 abacacde 過濾結果為 abcde 要求實現函式格式 void stringfilter const char pinputstr,long linputl...