微軟面試題(轉載)

微軟十五道面試題

1、有一個整數數組,請求出兩兩之差絕對值最小的值,
記住,只要得出最小值即可,不需要求出是哪兩個數。

2、寫一個函數,檢查字符是否是整數,如果是,返回其整數值。
(或者:怎樣只用4行代碼編寫出一個從字符串到長整形的函數?)

3、給出一個函數來輸出一個字符串的所有排列。

4、請編寫實現malloc()內存分配函數功能一樣的代碼。
給出一個函數來複制兩個字符串A和B。字符串A的後幾個字節和字符串B的前幾個字節重疊。

5、怎樣編寫一個程序,把一個有序整數數組放到二叉樹中?

6、怎樣從頂部開始逐層打印二叉樹結點數據?請編程。  

7、怎樣把一個鏈表掉個順序(也就是反序,注意鏈表的邊界條件並考慮空鏈表)?

8、請編寫能直接實現int atoi(const char * pstr)函數功能的代碼。

9、編程實現兩個正整數的除法
編程實現兩個正整數的除法,當然不能用除法操作符。
// return x/y.
int div(const int x, const int y)
{
  ....
}

10、在排序數組中,找出給定數字的出現次數
比如 [1, 2, 2, 2, 3] 中2的出現次數是3次。

11、平面上N個點,每兩個點都確定一條直線,
求出斜率最大的那條直線所通過的兩個點(斜率不存在的情況不考慮)。時間效率越高越好。

12、一個整數數列,元素取值可能是0~65535中的任意一個數,相同數值不會重複出現。0是例外,可以反覆出現。
請設計一個算法,當你從該數列中隨意選取5個數值,判斷這5個數值是否連續相鄰。
注意:
- 5個數值允許是亂序的。比如: 8 7 5 0 6
- 0可以通配任意數值。比如:8 7 5 0 6 中的0可以通配成9或者4
- 0可以多次出現。
- 複雜度如果是O(n2)則不得分。

13、設計一個算法,找出二叉樹上任意兩個結點的最近共同父結點。
複雜度如果是O(n2)則不得分。

14、一棵排序二叉樹,令 f=(最大值+最小值)/2,
設計一個算法,找出距離f值最近、大於f值的結點。
複雜度如果是O(n2)則不得分。

15、一個整數數列,元素取值可能是1~N(N是一個較大的正整數)中的任意一個數,相同數值不會重複出現。
設計一個算法,找出數列中符合條件的數對的個數,滿足數對中兩數的和等於N+1。
複雜度最好是O(n),如果是O(n2)則不得分。


谷歌八道面試題

16、正整數序列Q中的每個元素都至少能被正整數a和b中的一個整除,現給定a和b,需要計算出Q中的前幾項,例如,當a=3,b=5,N=6時,序列爲3,5,6,9,10,12
(1)、設計一個函數void generate(int a,int b,int N ,int * Q)計算Q的前幾項
(2)、設計測試數據來驗證函數程序在各種輸入下的正確性。

17、有一個由大小寫組成的字符串,現在需要對他進行修改,將其中的所有小寫字母排在答謝字母的前面(大寫或小寫字母之間不要求保持原來次序),如有可能儘量選擇時間和空間效率高的算法 c語言函數原型void proc(char *str) 也可以採用你自己熟悉的語言

18、如何隨機選取1000個關鍵字
給定一個數據流,其中包含無窮盡的搜索關鍵字(比如,人們在谷歌搜索時不斷輸入的關鍵字)。如何才能從這個無窮盡的流中隨機的選取1000個關鍵字?

19、判斷一個自然數是否是某個數的平方
說明:當然不能使用開方運算。

20、給定能隨機生成整數1到5的函數,寫出能隨機生成整數1到7的函數。

21、1024! 末尾有多少個0?

22、有5個海盜,按照等級從5到1排列,最大的海盜有權提議他們如何分享100枚金幣。
但其他人要對此表決,如果多數反對,那他就會被殺死。
他應該提出怎樣的方案,既讓自己拿到儘可能多的金幣又不會被殺死?
(提示:有一個海盜能拿到98%的金幣)

23、Google2009華南地區筆試題
給定一個集合A=[0,1,3,8](該集合中的元素都是在0,9之間的數字,但未必全部包含),
指定任意一個正整數K,請用A中的元素組成一個大於K的最小正整數。

比如,A=[1,0] K=21 那麼輸出結構應該爲100。


百度三道面試題

24、用C語言實現一個revert函數,它的功能是將輸入的字符串在原串上倒序後返回。

25、用C語言實現函數void * memmove(void *dest, const void *src, size_t n)。memmove
函數的功能是拷貝src所指的內存內容前n個字節到dest所指的地址上。

分析:由於可以把任何類型的指針賦給void類型的指針,這個函數主要是實現各種數據類型的拷貝。

26、有一根27釐米的細木杆,在第3釐米、7釐米、11釐米、17釐米、23釐米這五個位置上各有一隻螞蟻。
木杆很細,不能同時通過一隻螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會後退。
當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一釐米的距離。

編寫程序,求所有螞蟻都離開木杆的最小時間和最大時間。


騰訊七道面試題

27、請定義一個宏,比較兩個數a、b的大小,不能使用大於、小於、if語句

28、兩個數相乘,小數點後位數沒有限制,請寫一個高精度算法

29、有A、B、C、D四個人,要在夜裏過一座橋。他們通過這座橋分別需要耗時1、2、5、10分鐘,只有一支手電,並且同時最多隻能兩個人一起過橋。請問,如何安排,能夠在17分鐘內這四個人都過橋?

30、有12個小球,外形相同,其中一個小球的質量與其他11個不同,
給一個天平,問如何用3次把這個小球找出來,並且求出這個小球是比其他的輕還是重

31、在一個文件中有 10G 個整數,亂序排列,要求找出中位數。內存限制爲 2G。只寫出思路即可。

32、一個文件中有40億個整數,每個整數爲四個字節,內存爲1GB,寫出一個算法:求出這個文件裏的整數裏不包含的一個整數

33、騰訊服務器每秒有2w個QQ號同時上線,找出5min內重新登入的qq號並打印出來。


雅虎三道面試題

34、編程實現:把十進制數(long型)分別以二進制和十六進制形式輸出,不能使用printf系列

35、編程實現:找出兩個字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串爲"cad"

36、有雙向循環鏈表結點定義爲:
struct node
{
  int data;
  struct node *front,*next;
};

有兩個雙向循環鏈表A,B,知道其頭指針爲:pHeadA,pHeadB,請寫一函數將兩鏈表中data值相同的結點刪除。


聯想五道筆試題

37、1)、設計函數 int atoi(char *s)。
2)、int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 輸出是多少?
3)、解釋局部變量、全局變量和靜態變量的含義。
4)、解釋堆和棧的區別。
5)、論述含參數的宏與函數的優缺點。

38、順時針打印矩陣
題目:輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字。
例如:如果輸入如下矩陣:

1              2              3              4
5              6              7              8
9              10             11             12
13             14             15             16
則依次打印出數字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。

分析:包括Autodesk、EMC在內的多家公司在面試或者筆試裏採用過這道題。

39、對稱子字符串的最大長度
題目:輸入一個字符串,輸出該字符串中對稱的子字符串的最大長度。
比如輸入字符串“google”,由於該字符串裏最長的對稱子字符串是“goog”,因此輸出4。

分析:可能很多人都寫過判斷一個字符串是不是對稱的函數,這個題目可以看成是該函數的加

強版。

40、用1、2、2、3、4、5這六個數字,寫一個main函數,打印出所有不同的排列,
如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連.

41、微軟面試題
一個有序數列,序列中的每一個值都能夠被2或者3或者5所整除,1是這個序列的第一個元素。求第1500個值是多少?


網易五道遊戲筆試題

42、兩個圓相交,交點是A1,A2。現在過A1點做一直線與兩個圓分別相交另外一點B1,B2。

B1B2可以繞着A1點旋轉。問在什麼情況下,B1B2最長

43、Smith夫婦召開宴會,並邀請其他4對夫婦參加宴會。在宴會上,他們彼此握手,
並且滿足沒有一個人同自己握手,沒有兩個人握手一次以上,並且夫妻之間不握手。
然後Mr. Smith問其它客人握手的次數,每個人的答案是不一樣的。

求Mrs Smith握手的次數

44、有6種不同顏色的球,分別記爲1,2,3,4,5,6,每種球有無數個。現在取5個球,求在一下
的條件下:
1、5種不同顏色,
2、4種不同顏色的球,
3、3種不同顏色的球,
4、2種不同顏色的球,
它們的概率。

45、有一次數學比賽,共有A,B和C三道題目。所有人都至少解答出一道題目,總共有25人。
在沒有答出A的人中,答出B的人數是答出C的人數的兩倍;單單答出A的人,比其他答出A的人
總數多1;在所有隻有答出一道題目的人當中,答出B和C的人數剛好是一半。
求只答出B的人數。

46、從尾到頭輸出鏈表
題目:輸入一個鏈表的頭結點,從尾到頭反過來輸出每個結點的值。鏈表結點定義如下:
struct ListNode
{
  int  m_nKey;
  ListNode* m_pNext;
};
分析:這是一道很有意思的面試題。該題以及它的變體經常出現在各大公司的面試、筆試題中。


47、金幣概率問題(威盛筆試題)

題目:10個房間裏放着隨機數量的金幣。每個房間只能進入一次,並只能在一個房間中拿金幣。
一個人採取如下策略:前四個房間只看不拿。隨後的房間只要看到比前四個房間都多的金幣數,
就拿。否則就拿最後一個房間的金幣。?

編程計算這種策略拿到最多金幣的概率。

48、找出數組中唯一的重複元素

1-1000放在含有1001個元素的數組中,只有唯一的一個元素值重複,其它均只出現一次.
每個數組元素只能訪問一次,設計一個算法,將它找出來;不用輔助存儲空間,
能否設計一個算法實現?

49、08百度校園招聘的一道筆試題

題目大意如下:
一排N(最大1M)個正整數+1遞增,亂序排列,第一個不是最小的,把它換成-1,
最小數爲a且未知求第一個被-1替換掉的數原來的值,並分析算法複雜度。

50、一道SPSS筆試題求解

題目:輸入四個點的座標,求證四個點是不是一個矩形
關鍵點:
1.相鄰兩邊斜率之積等於-1,
2.矩形邊與座標系平行的情況下,斜率無窮大不能用積判斷。
3.輸入四點可能不按順序,需要對四點排序。

51、矩陣式螺旋輸出

   

52、求兩個或N個數的最大公約數和最小公倍數。

53、最長遞增子序列

題目描述:設L=<a1,a2,…,an>是n個不同的實數的序列,L的遞增子序列是這樣一個子序列

Lin=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2<…<akm。
求最大的m值。

54、字符串原地壓縮

題目描述:“eeeeeaaaff" 壓縮爲 "e5a3f2",請編程實現。

55、字符串匹配實現

請以倆種方法,回溯與不回溯算法實現。

56、一個含n個元素的整數數組至少存在一個重複數,

請編程實現,在O(n)時間內找出其中任意一個重複數。

57、求最大重疊區間大小

題目描述:請編寫程序,找出下面“輸入數據及格式”中所描述的輸入數據文件中最大重疊區間的大小。
對一個正整數 n ,如果n在數據文件中某行的兩個正整數(假設爲A和B)之間,即A<=n<=B或A>=n>=B ,則 n 屬於該行;
如果 n 同時屬於行i和j ,則i和j有重疊區間;重疊區間的大小是同時屬於行i和j的整數個數。

例如,行(10 20)和(12 25)的重疊區間爲 [12 20] ,其大小爲9,行(20 10)和( 20 30 )的重疊區間大小爲 1 。

58、整數的素數和分解問題

歌德巴赫猜想說任何一個不小於6的偶數都可以分解爲兩個奇素數之和。
對此問題擴展,如果一個整數能夠表示成兩個或多個素數之和,則得到一個素數和分解式。

對於一個給定的整數,輸出所有這種素數和分解式。
注意,對於同構的分解只輸出一次(比如5只有一個分解2 + 3,而3 + 2是2 + 3的同構分解式

)。

例如,對於整數8,可以作爲如下三種分解:
(1) 8 = 2 + 2 + 2 + 2
(2) 8 = 2 + 3 + 3
(3) 8 = 3 + 5

59、google的一道面試題

題目:
輸入a1,a2,...,an,b1,b2,...,bn,
在O(n)的時間,O(1)的空間將這個序列順序改爲a1,b1,a2,b2,a3,b3,...,an,bn,
且不需要移動,通過交換完成,只需一個交換空間。

例如,N=9時,第2步執行後,實際上中間位置的兩邊對稱的4個元素基本配對,
只需交換中間的兩個元素即可,如下表所示。顏色表示每次要交換的元素,左邊向右交換,右邊向左交換。
交換過程如下表所示
交換x1,x3;交換x2,x4;再交換中間的x1,x4;交換y1,y2。

60、百度筆試題

給定一個存放整數的數組,重新排列數組使得數組左邊爲奇數,右邊爲偶數。
要求:空間複雜度O(1),時間複雜度爲O(n)。

 

版權聲明:
1、以上全部題目的知識產權,歸原公司微軟、谷歌、百度等公司所有。
2、本人對本BLOG內所有任何文章和資料享有版權,轉載,請註明作者本人,並以鏈接形式註明出處。
3、侵犯本人版權相關利益者,個人會在騰訊微博、CSDN迷你博客中永久追蹤,給予譴責。
同時,保留追究法律責任的權利。向您的厚道致敬,謝謝。

                    July、二零一一年三月十日。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章