牛客網的面試題(一)(字首,中綴,字尾)

2021-07-16 21:09:07 字數 3184 閱讀 2886

1.題目:unsigned int a = 0x1234;

unsigned char b = *(unsigned char *)&a;在

32位大端模式處理器上變數

b等於()?

a 0x00   b 0x12   c 0x34   d 0x1234

解析:int 是4

個位元組,大端儲存,所以補齊的話是

a = 0x00 00 12 34;而b

是char

型,按照大端儲存的話,就只取了

a中低位址中的一位,所以

b = 0x00.

2.設有以下的巨集定義,#define n 3

#define y(n) ((n+1)*n)

則執行語句:z = 2*(n + y(5+1));後,z

的值為:

48.

解析:巨集定義是直接替換,z = 2*(n + ((n+1)*5+1));

把n = 3

放進去是

48.

3.題目:將長度為n

的單鏈表連線到長度為

m的單鏈表之後,其演算法的時間複雜度為

o(m)

解析:首先指標要遍歷長度為m

的單鏈表,找到鍊錶的尾部,這時候時間複雜度為

o(m)

,再將長度為

n的鍊錶放在

m之後,這時候的時間複雜度為

o(1),

可忽略不計,所以總的時間複雜度為

o(m)

。時間複雜度是總運算次數表示式中受n

的變化量影響最大的那一項。

4.已知一算術表示式中的中綴表示式為a-(b+c/d)*e,

則字尾形式為:

abcd/+e*-。

解析:1)字首表示式的計算求值:

從右到左掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的運算,並將結果壓入棧,重複上面的過程,最後算出的就是表示式的結果。

如:「- * + 3,4

,5,6

」 l 從右至左掃瞄,將6、5

、4、3

壓入堆疊;

l 遇到+

運算子,因此彈出3和

4(3為棧頂元素,

4為次頂元素,注意與字尾表示式做比較),計算出

3+4的值,得

7,再將

7入棧;

l 接下來是×

運算子,因此彈出7和

5,計算出

7×5=35

,將35

入棧;l 

最後是-

運算子,計算出

35-6

的值,即

29,由此得出最終結果。

將中綴表示式轉換為字首表示式:

2)字尾表示式的求值:

從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算(次頂元素op 

棧頂元素),並將結果入棧;重複上述過程直到表示式最右端,最後運算得出的值即為表示式的結果。

例如「3 4 + 5 × 6 -」:

l  從左至右掃瞄,將3和4

壓入堆疊;

l 遇到+

運算子,因此彈出4和

3(4為棧頂元素,

3為次頂元素,注意與字首表示式做比較),計算出

3+4的值,得

7,再將

7入棧;

l 將5

入棧;

l 接下來是×

運算子,因此彈出5和

7,計算出

7×5=35

,將35

入棧;

l 將6

入棧;l 最後是-

運算子,計算出

35-6

的值,即

29,由此得

出最終結果。

將中綴表示式轉換為字尾表示式:

與轉換為字首表示式相似,遵循以下步驟:

(1) 初始化兩個棧:運算子棧

s1和儲存中間結果的棧s2;

(2) 從左至右掃瞄中綴表示式;

(3) 遇到運算元時,將其壓入s2;

(4) 遇到運算子時,比較其與

s1棧頂運算子的優先順序:

(4-1) 如果

s1為空,或棧頂運算子為左括號

「(」,則直接將此運算子入棧;

(4-2) 否則,若優先順序比棧頂運算子的高,也將運算子壓入

s1(注意轉換為字首表示式時是優先順序較高或相同,而這裡則不包括相同的情況);

(4-3) 否則,將

s1棧頂的運算子彈出並壓入到

s2中,再次轉到

(4-1)與s1

中新的棧頂運算子相比較;

(5) 遇到括號時:

(5-1) 如果是左括號

「(」,則直接壓入s1;

(5-2) 如果是右括號

「)」,則依次彈出

s1棧頂的運算子,並壓入

s2,直到遇到左括號為止,此時將這一對括號丟棄;

(6) 重複步驟

(2)至

(5),直到表示式的最右邊;

(7) 將

s1中剩餘的運算子依次彈出並壓入s2;

(8) 依次彈出

s2中的元素並輸出,結果的逆序即為中綴表示式對應的字尾表示式**換為字首表示式時不用逆序)。

5.題目:c++中,如果

x是整型變數,則合法的形式為(

*&a)

a、 &(

a + 1

)b、

*a;c、

&*ad、

*&a解析:

x是整型變數,有乙個儲存位址

,變數不能隨便取位址。

a,x有位址,但是

x+5這個表示式不能取位址操作b,*

是取指標變數指向的內容,

x不是指標,錯誤c,c

選項中也包含

*x,道理同

b選項,是錯誤的d,x

變數先去位址,得到指向

x的指標

:&x然後再用

*操作符取該位址的內容,結果還是

x,是合法的。

牛客網(面試題)

每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。hf作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的 首先,讓小朋友們圍成乙個大圈。然後,他隨機指定乙個數m,讓編號為0的小朋友開始報數。每次喊到m 1的那個小朋友要出列唱首歌,然後可以在禮品箱中任意的挑選禮...

跳台階 牛客網面試題

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 當每次只跳一級台階時,只有一種情況 當每次只跳兩級台階時,也是只有一種情況 當又跳一級台階又跳兩級台階時,我們可以假設第一步跳一級台階,那麼後面的所有的跳法為f n 1 當第一步跳兩級...

c 華為面試題 牛客網 3 0

越做越覺得非科班出身的艱難。要不還是老老實實畫圖去?好吧 再來一題 給出乙個名字,該名字有26個字串組成,定義這個字串的 漂亮度 是其所有字母 漂亮度 的總和。每個字母都有乙個 漂亮度 範圍在1到26之間。沒有任何兩個字母擁有相同的 漂亮度 字母忽略大小寫。給出多個名字,計算每個名字最大可能的 漂亮...