2013谷歌校園招聘筆試題

2022-07-15 03:45:13 字數 4411 閱讀 7185

1.1    使用c語言將乙個1g位元組的字元陣列從頭到尾全部設定為字元'a',在一台典型的當代pc上,需要花費的cpu時間的數量級最接近:

a. 0.001秒      b. 1秒         c. 100秒     d. 2小時

解答:現在機器cpu都是ghz,每次需要若干個指令,大約在1秒。

1.2    在某些極端要求效能的場合,我們需要對程式進行優化,關於優化,以下說明正確的是:

a.  將程式整個用組合語言改寫會大大提高程式效能。

b.  在優化前,可以先確定哪部分**最為耗時,然後對這部分**使用組合語言改寫,使用的彙編語句數目越少,程式就執行越快。

c.  使用組合語言雖然可能提高程式效能,但是降低了程式的可移植性和可維護性,所以應該絕對避免。

d. 適當調整彙編指令的順序,可以縮短程式執行的時間。

解答:a中,不應該將程式整個改寫,應該只改寫關鍵部分,整個改寫降低了程式的可移植性和可維護性,b,彙編語句不是數目越少越快,迴圈等

c。不應該絕對避免

1.3  對如下c語言程式在普通的x86 pc上面執行時候的輸出敘述正確的是:

#includeusing

namespace

std;

char *f()

intmain()

a.程式可能崩潰,也可能輸出hello world

b.程式可能崩潰,也可能輸出world

c.程式可能崩潰,也可能輸出hello

d.程式一定會崩潰

解答:這個程式是想返回乙個陣列的值,x是乙個陣列,是函式f()中的乙個區域性變數,在這個函式結束的時候,將會釋放掉這個陣列,而x+6只是乙個指向world的乙個位址,f()返回的就是這個位址,但是位址中的內容沒有了。

1.4   方程x1+x2+x3+x4 =30有多少滿足x1>=2,x2>=0,x3>=-5, x4>=8的整數解?

a.3276     b. 3654     c.2925    d.17550 

解答:我用程式執行出來是3276,組合數學之排列組合,我們引入新的變數y1=x1-2,y2=x2,y3=x3+5,y4=x4-8,那麼方程變為:

y1+y2+y3+y4=25,則解的個數為:c(25+4-1,25)=c(28,25)=c(28,3)=3276種

1.5   乙個袋子裡裝了100個蘋果,100個香蕉,100個桔子,100個梨,如果每分鐘從裡面隨機抽取乙個水果,那麼最多過多少分鐘時間能肯定至少拿到一打相同種類的水果?(1打=12個)

a. 40 b. 12 c.24 d.45

解答:4中水果都取了11個,用時間4*11=44分鐘,再取乙個。45分鐘。。組合數學之鴿巢原理

1.6      雙敗淘汰賽與淘汰賽相仿,也是負者出局,但負一場後並未被淘汰,只是跌入負者組,在負者組再負者(即總共已負兩場)才被淘汰。現在有10個人參加雙敗淘汰賽,假設我們取消最後的勝者組冠軍vs負者組冠軍的比賽,那麼乙個需要舉行多少場比賽?

a. 16 b.17 c.18d.19e.20

解答:10個人需要進行9場產生9個第一次失敗的人,在失敗者的9個人需要8場比賽,淘汰8個人,所以需要9+8=17

10個人 5場比賽 就分為負者組5人和勝者組5人,勝者組5人需進行4場 即可確定勝者組冠軍

負責組9個人 需進行8場可確定負者組冠軍 這樣總共17場比賽。

1.7     n個節點的二叉樹,最多可以有多少層?

a. n/2   b. log(n)   c. n-1   d.n

解答:每層乙個節點的二叉樹

.下面哪個序列不是上圖的拓撲排序?

a. ebfgadch    b.adbdgfch    c.adchebfg  

d.aedbfgch

解答:(箭頭後邊的永遠別再箭頭前邊的前面)

拓撲排序方法如下:

(1)從有向圖中選擇乙個沒有前驅(即入度為0)的頂點並且輸出它.

(2)從網中刪去該頂點,並且刪去從該頂點發出的全部有向邊.

(3)重複上述兩步,直到剩餘的網中不再存在沒有前趨的頂點為止.

在c中h應是的g後面的。

1.9假設某主機安裝了2g記憶體,在其上執行的某支援mmu的32位linux發行版中,一共執行了x,y,z三個程序,下面關於三個程式使用記憶體的方式,哪個是可行的?

a.x,y, z 的虛擬位址空間都對映到0~4g的虛擬位址上

b.x在堆上分配總大小為1gb的空間,y在堆上分配200mb,z在堆上分配500mb,並且記憶體對映訪問一共1gb的磁碟檔案。

c. x 在堆上分配1gb,y在堆上分配800mb,z在堆上分配400mb

d.以上訪問方式都是可行的

分析:mmu是記憶體管理單位這個應該是d,32位的系統會分配4g的虛擬位址,windows架構下會用2g作業系統核心位址公用,但所有操作都是在虛擬位址上進行的,至於怎麼把虛擬位址對映到實際位址是作業系統做的事,不管分配多少,只要少於4g都可以

1.10當使用tcp協議程式設計是,下列問題哪個是必須由程式設計師考慮和處理的?

a. 亂序資料報的重傳    b.資料傳輸過程中的糾錯

c.網路擁塞處理          d.發生資料的格式和應用層協議

(2.1,2.2為程式設計題,需要寫出程式實現;2.3為演算法設計題,只需要寫出演算法設計思路及關鍵步驟的偽**即可。)

2.1給定三個整數a,b,c,實現函式int median(int a, int b, int c),返回三個數的中位數。不可以使用sort,要求整數操作(比較,位執行,加減乘除等)次數盡量少。 並分析說明程式最壞和平均情況下使用的次數。

解答:用了三次比較,一次運算。

**實現:

#include using

namespace

std;

int median(int a,int b,int

c)

else

if (c

else

if (c>max)

return a+b+c-min-max;

} int

main()

2.2給定乙個key(只含有ascii編碼的小寫英文本母),例如kof,然後對input的string(只含有ascii編碼的小寫英文本元)利用這個key排序。順序是:先按照key中的字元排序,然後對key中不包含的字元,按a-z排序;

解答:思路:(1)用hash表的思想,先對key字和a~z重新排序,可以定義乙個26個字元的陣列,char hash[26];   對不同的字母對應的給與排序的值,

例如key中為kof,得到的hash['k'-97]=0;  hash['o'-97]=1;hash['f'-97]=2;hash['a'-97]=3;..................

(2)用快速排序(也可以是其他演算法)演算法進行排序

**實現:

#include #include 

using

namespace

std;

void swap(char* a,char*b)

void create_hash(char* hashtable,char*key)

//先對關鍵字元排在前面

for (int i=0;i)

//對剩餘的字元進行排列

for (int i=0;i<26;i++)

} }

//快速排序

void quick_sort(char* str,int istart,int iend,char*hashtable)

char* psign=str+istart; //

將第乙個作為劃分標誌

char* pmove=str+iend; //

需要比較移動的點

char*ptemp;

while(psign!=pmove)

else

} else

else

} }

quick_sort(str,istart,psign-1-str,hashtable);

quick_sort(str,psign+1-str,iend,hashtable);

}

void sort(char* str,char*key)

intmain()

2.3 乙個平行於座標軸的n*n的網格,左下角(0,0)右上角(n,n),n為非負整數,有n個平行於座標軸的矩形,每個矩形用左下角(x1,y1)右上角(x2,y2)來表示,x1,y1,x2,y2都是非負整數,現在有非常多個query,每個query會詢問乙個網格(x,y)(x+1,y+1)乙個被幾個矩形覆蓋。現在要求設計乙個演算法,使得出來每個query的時間複雜度盡可能低,在這個前提下,預處理的時間複雜度盡可能低。

(1<=n<=1000)

谷歌2013校園招聘筆試題

1.4 小組賽,每個小組有5支隊伍,互相之間打單迴圈賽,勝一場3分,平一場1分,輸一場不得分,小組前三名出線。平分抽籤。問乙個隊最少拿幾分就有理論上的出線希望 a.1 b.2 c.3 d.4 分析 設有a b c d e 5支球隊,假設abc晉級了。如果球隊c積1分可以出現,由於是單迴圈賽,說明他4...

2011谷歌校園招聘筆試題

恢復內容開始 一 單項選擇題 1 從n個未排序的數中尋找中位數 第 n 2 大的數 平均時間複雜度最優演算法的複雜為 a.o logn b.o n c.o nlogn d.o n 2 分析 求無序陣列的中位數 中位數即是排過序後的處於陣列最中間的元素。不考慮陣列長度為偶數的情況。設集合元素個數為n。...

2010谷歌校園招聘筆試題

1 哪個表示式不能用這個匹配 a bc d?a.ad b.abcd c.abc d.abccd 2 intel x86 cpu中,哪種運算最慢 a 加b.減 c.乘d.除 3 下面程式的輸出 include using namespace std intmain else system pause ...