過幾天就要進行華為的機試了,今兒臨時抱抱佛腳,在網上找到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不太一樣,我的思路傾向於流程控制,寫的有點冗餘。
1void 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...