(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之間。沒有任何兩個字母擁有相同的 漂亮度 字母忽略大小寫。給出多個名字,計算每個名字最大可能的 漂亮...