牛客網試題 答案分析 大牛面試經驗(2)

2021-09-19 17:34:00 字數 3071 閱讀 1278

(1)若有說明:int a[3][4];,則對 a 陣列元素的非法引用是( )

a、a[0][2*1]

b、a[1][3]

c、a[4-2][0]

d、a[0][2+2]

答案:d

解析:a[0][4]相當於第一行第5個元素,而a是三行四列的陣列,下標最大的元素為a[2][3],即第三行第4個元素;

d 下標從0開始,從0開始,從0開始 重要的事說三遍;

錯誤的原因在於溢位了。

(2)陣列通常具有的兩種基本操作是()

a、查詢和修改

b、查詢和索引

c、索引和修改

d、建立和刪除

答案:a

解析:一定要注意,索引表示的是陣列的下標,而不是一種操作。

(3)設有乙個 10 階的對稱矩陣 a ,採用壓縮儲存方式,以行序為主儲存, a1 , 1 為第乙個元素,其儲存位址為 1 ,每個元素佔 1 個位址空間,則 a8 , 5 的位址為 。

a、13

b、33

c、18

d、40

答案:b

解析:對稱矩陣,只需要存一半就行了, 第一行:1個 第二行:2個 第三行:3個 ...以此類推到第七行;

第八行:1~5,前5個 所以:1+2+3+4+5+6+7 再加 5 總共得:33;

需要注意的地方是:需要注意的是,對陣矩陣,以下三角方式存。

(4)稀疏矩陣一般的壓縮儲存方式有兩種,即 。

a、二維陣列和三維陣列

b、三元組和雜湊

c、三元組和十字鍊錶

d、雜湊和十字鍊錶

答案:c

解析:所謂三元組就是乙個元素存放三個資訊,矩陣中的行號,列號以及值,這樣就可以不存放值為0的元素,實現壓縮。

十字鍊錶相當於是鄰接表和逆鄰接表的合集,在乙個元素裡面存放了值以及出度表和入度表,

這樣也不需要像鄰接矩陣那樣存放大量0元素,而且找乙個節點的入節點和找出節點一樣快。

(5)a為整數陣列, n為a的陣列長度,請問執行以下**,最壞情況下的時間複雜度為____。

void fun(int a, int n) }}

}a、o(n)

b、o(n^2)

c、o(nlog(n))

d、o(log(n))

e、o(n^3)

f、無法確定

答案:b

解析:氣泡排序法,最壞情況為(n-1)+(n-2)+……+1=n(n-1)/2 所以複雜度是n^2。

知識點:何謂氣泡排序法

(1)兩兩比較相鄰元素a(i)和a(i+1)(i=1,2,…n-1),如果a(i)>a(i+1),則交換a(i)和a(i+1)的位置;

(2)對剩下的n-1個元素,再兩兩進行比較,按同樣規則交換它們的位置,經過n-2次比較,將次最大值交換到a(n-1)的位置;

(3)如法炮製,經過n-1趟的「冒泡處理」,每趟進行n-i次的比較,全部數列有序。

(6)陣列 a[0 … 4 , -1 … -3 , 5 … 7] 中含有的元素個數是 。

a、55

b、45

c、36

d、16

答案:b

解析:這是乙個三維陣列,三維為x,y,z,算出每個維度的容量,相乘即為答案。

(7)有乙個用陣列c[1…m]表示的環形佇列,m為陣列的長度。假設f為隊頭元素在陣列中的位置,r為隊尾元素的後一位置(按順時針方向)。若佇列非空,則計算佇列中元素個數的公式應為?

a、(m+r-f)mod m

b、r-f

c、(m-r+f) mod m

d、(m-r-f) mod m

e、(r-f) mod m

f、需要判斷邊界

答案:a

解析:

注意陣列c[1..m]下標從1開始,並且r為隊尾元素的後一位置。

當r>f時,好說,佇列的長度為r-f;

當r(8)c中,二維陣列初始化的方法是:int a[3][3]=,,};說法是否正確?

a、正確

b、錯誤

答案: a

解析:最外層的 會初始化 a 即第一維。而 會初始化 a[0] 由於只有乙個元素,後續元素會預設置 0 。其他同理。

(9)若已定義: int a=[0,1,2,3,4,5,6,7,8,9],*p=a,i; 其中0≤i≤9,則對a陣列錯誤的引用是()

a、a[p-a]

b、*(&a[i])

c、p[i]

d、a[10]

答案:d

解析:陣列下標範圍為0~9,所以a[10]越界。

知識點:(1)a正確,因為指標是有減法的,不過只在陣列之中應用,用來表示元素的個數的差.

這裡 p 和 a其實是相等的,所以a答案等價與 a[0].

(2)陣列名就是陣列的首位址,此時p和a相等,即[p-a]就是 a[0].

*(&a[i])就是a[i]

p[i]相當於a[i]

p+i是指向陣列a[i]的指標。

(10)關於 int a[10]; 問下面哪些不可以表示 a[1] 的位址?

a、a+sizeof(int)

b、&a[0]+1

c、(int*)&a+1

d、(int*)((char*)&a+sizeof(int))

答案:a

解析:a. a+sizeof(int)

// 不正確, 在32位機器上相當於指標運算 a + 4

b. &a[0]+1

// 正確,陣列首元素位址加1,根據指標運算就是a[1]的位址

c. (int*)&a+1

// 正確,陣列位址被強制型別轉換為int*,然後加1,這樣和b表示的乙個意思

d. (int*)((char*)&a+sizeof(int))

// 正確,資料位址先被轉換為char*,然後加4,根據指標運算公式,向前移動4 * sizeof(char),之後被轉換為int*,顯然是a[1]的位址

牛客網(面試題)

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

跳台階 牛客網面試題

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

c 華為面試題 牛客網 3 0

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