微軟、百度、聯(lián)想等名企C++筆試題匯總
微軟十五道筆試題
1、有一個(gè)整數(shù)數(shù)組,請(qǐng)求出兩兩之差絕對(duì)值最小的值,記住,只要得出最小值即可,不需要求出是哪兩個(gè)數(shù),
微軟、百度、聯(lián)想等名企C++筆試題匯總
。2、寫一個(gè)函數(shù),檢查字符是否是整數(shù),如果是,返回其整數(shù)值。
(或者:怎樣只用4行代碼編寫出一個(gè)從字符串到長(zhǎng)整形的函數(shù)?)
3、給出一個(gè)函數(shù)來輸出一個(gè)字符串的所有排列。
4、請(qǐng)編寫實(shí)現(xiàn)malloc()內(nèi)存分配函數(shù)功能一樣的代碼。
給出一個(gè)函數(shù)來復(fù)制兩個(gè)字符串A和B。字符串A的后幾個(gè)字節(jié)和字符串B的前幾個(gè)字節(jié)重疊。
5、怎樣編寫一個(gè)程序,把一個(gè)有序整數(shù)數(shù)組放到二叉樹中?
6、怎樣從頂部開始逐層打印二叉樹結(jié)點(diǎn)數(shù)據(jù)?請(qǐng)編程。
7、怎樣把一個(gè)鏈表掉個(gè)順序(也就是反序,注意鏈表的邊界條件并考慮空鏈表)?
8、請(qǐng)編寫能直接實(shí)現(xiàn)int atoi(const char * pstr)函數(shù)功能的代碼。
9、編程實(shí)現(xiàn)兩個(gè)正整數(shù)的除法
編程實(shí)現(xiàn)兩個(gè)正整數(shù)的除法,當(dāng)然不能用除法操作符。
// return x/y.
int div(const int x, const int y)
{
....
}
10、在排序數(shù)組中,找出給定數(shù)字的出現(xiàn)次數(shù)
比如 [1, 2, 2, 2, 3] 中2的出現(xiàn)次數(shù)是3次。
11、平面上N個(gè)點(diǎn),每?jī)蓚(gè)點(diǎn)都確定一條直線,
求出斜率最大的那條直線所通過的兩個(gè)點(diǎn)(斜率不存在的情況不考慮)。時(shí)間效率越高越好。
12、一個(gè)整數(shù)數(shù)列,元素取值可能是0~65535中的任意一個(gè)數(shù),相同數(shù)值不會(huì)重復(fù)出現(xiàn)。0是例外,可以反復(fù)出現(xiàn)。
請(qǐng)?jiān)O(shè)計(jì)一個(gè)算法,當(dāng)你從該數(shù)列中隨意選取5個(gè)數(shù)值,判斷這5個(gè)數(shù)值是否連續(xù)相鄰。
注意:
- 5個(gè)數(shù)值允許是亂序的。比如: 8 7 5 0 6
- 0可以通配任意數(shù)值。比如:8 7 5 0 6 中的0可以通配成9或者4
- 0可以多次出現(xiàn)。
- 復(fù)雜度如果是O(n2)則不得分。
13、設(shè)計(jì)一個(gè)算法,找出二叉樹上任意兩個(gè)結(jié)點(diǎn)的最近共同父結(jié)點(diǎn)。
復(fù)雜度如果是O(n2)則不得分。
14、一棵排序二叉樹,令 f=(最大值+最小值)/2,
設(shè)計(jì)一個(gè)算法,找出距離f值最近、大于f值的結(jié)點(diǎn)。
復(fù)雜度如果是O(n2)則不得分。
15、一個(gè)整數(shù)數(shù)列,元素取值可能是1~N(N是一個(gè)較大的正整數(shù))中的任意一個(gè)數(shù),相同數(shù)值不會(huì)重復(fù)出現(xiàn)。
設(shè)計(jì)一個(gè)算法,找出數(shù)列中符合條件的數(shù)對(duì)的個(gè)數(shù),滿足數(shù)對(duì)中兩數(shù)的和等于N+1。
復(fù)雜度最好是O(n),如果是O(n2)則不得分。
谷歌八道筆試題
16、正整數(shù)序列Q中的每個(gè)元素都至少能被正整數(shù)a和b中的一個(gè)整除,現(xiàn)給定a和b,需要計(jì)算出Q中的前幾項(xiàng),例如,當(dāng)a=3,b=5,N=6時(shí),序列為3,5,6,9,10,12
(1)、設(shè)計(jì)一個(gè)函數(shù)void generate(int a,int b,int N ,int * Q)計(jì)算Q的前幾項(xiàng)
(2)、設(shè)計(jì)測(cè)試數(shù)據(jù)來驗(yàn)證函數(shù)程序在各種輸入下的正確性。
17、有一個(gè)由大小寫組成的字符串,現(xiàn)在需要對(duì)他進(jìn)行修改,將其中的所有小寫字母排在答謝字母的前面(大寫或小寫字母之間不要求保持原來次序),如有可能盡量選擇時(shí)間和空間效率高的算法 c語言函數(shù)原型void proc(char *str)也可以采用你自己熟悉的語言
18、如何隨機(jī)選取1000個(gè)關(guān)鍵字
給定一個(gè)數(shù)據(jù)流,其中包含無窮盡的搜索關(guān)鍵字(比如,人們?cè)诠雀杷阉鲿r(shí)不斷輸入的關(guān)鍵字)。如何才能從這個(gè)無窮盡的流中隨機(jī)的選取1000個(gè)關(guān)鍵字?
19、判斷一個(gè)自然數(shù)是否是某個(gè)數(shù)的平方
說明:當(dāng)然不能使用開方運(yùn)算。
20、給定能隨機(jī)生成整數(shù)1到5的函數(shù),寫出能隨機(jī)生成整數(shù)1到7的函數(shù)。
21、1024! 末尾有多少個(gè)0?
22、有5個(gè)海盜,按照等級(jí)從5到1排列,最大的海盜有權(quán)提議他們?nèi)绾畏窒?00枚金幣。
但其他人要對(duì)此表決,如果多數(shù)反對(duì),那他就會(huì)被殺死。
他應(yīng)該提出怎樣的方案,既讓自己拿到盡可能多的金幣又不會(huì)被殺死?
(提示:有一個(gè)海盜能拿到98%的金幣)
23、Google2009華南地區(qū)筆試題
給定一個(gè)集合A=[0,1,3,8](該集合中的元素都是在0,9之間的數(shù)字,但未必全部包含),
指定任意一個(gè)正整數(shù)K,請(qǐng)用A中的元素組成一個(gè)大于K的最小正整數(shù)。
比如,A=[1,0] K=21 那么輸出結(jié)構(gòu)應(yīng)該為100。
百度三道筆試題
24、用C語言實(shí)現(xiàn)一個(gè)revert函數(shù),它的功能是將輸入的字符串在原串上倒序后返回。
25、用C語言實(shí)現(xiàn)函數(shù)void * memmove(void *dest, const void *src, size_t n)。memmove
函數(shù)的功能是拷貝src所指的內(nèi)存內(nèi)容前n個(gè)字節(jié)到dest所指的地址上。
分析:由于可以把任何類型的指針賦給void類型的指針,這個(gè)函數(shù)主要是實(shí)現(xiàn)各種數(shù)據(jù)類型的拷貝。
26、有一根27厘米的細(xì)木桿,在第3厘米、7厘米、11厘米、17厘米、23厘米這五個(gè)位置上各有一只螞蟻。
木桿很細(xì),不能同時(shí)通過一只螞蟻。開始時(shí),螞蟻的頭朝左還是朝右是任意的,它們只會(huì)朝前走或調(diào)頭,但不會(huì)后退。
當(dāng)任意兩只螞蟻碰頭時(shí),兩只螞蟻會(huì)同時(shí)調(diào)頭朝反方向走。假設(shè)螞蟻們每秒鐘可以走一厘米的距離。
編寫程序,求所有螞蟻都離開木桿的最小時(shí)間和最大時(shí)間。
騰訊七道筆試題
27、請(qǐng)定義一個(gè)宏,比較兩個(gè)數(shù)a、b的大小,不能使用大于、小于、if語句
28、兩個(gè)數(shù)相乘,小數(shù)點(diǎn)后位數(shù)沒有限制,請(qǐng)寫一個(gè)高精度算法
29、有A、B、C、D四個(gè)人,要在夜里過一座橋。他們通過這座橋分別需要耗時(shí)1、2、5、10分鐘,只有一支手電,并且同時(shí)最多只能兩個(gè)人一起過橋。請(qǐng)問,如何安排,能夠在17分鐘內(nèi)這四個(gè)人都過橋?
30、有12個(gè)小球,外形相同,其中一個(gè)小球的質(zhì)量與其他11個(gè)不同,
給一個(gè)天平,問如何用3次把這個(gè)小球找出來,并且求出這個(gè)小球是比其他的輕還是重
31、在一個(gè)文件中有 10G 個(gè)整數(shù),亂序排列,要求找出中位數(shù)。內(nèi)存限制為 2G。只寫出思路即可。
32、一個(gè)文件中有40億個(gè)整數(shù),每個(gè)整數(shù)為四個(gè)字節(jié),內(nèi)存為1GB,寫出一個(gè)算法:求出這個(gè)文件里的整數(shù)里不包含的一個(gè)整數(shù)
33、騰訊服務(wù)器每秒有2w個(gè)QQ號(hào)同時(shí)上線,找出5min內(nèi)重新登入的qq號(hào)并打印出來。
雅虎三道筆試題
34、編程實(shí)現(xiàn):把十進(jìn)制數(shù)(long型)分別以二進(jìn)制和十六進(jìn)制形式輸出,不能使用printf系列
35、編程實(shí)現(xiàn):找出兩個(gè)字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串為"cad"
36、有雙向循環(huán)鏈表結(jié)點(diǎn)定義為:
struct node
{
int data;
struct node *front,*next;
};
有兩個(gè)雙向循環(huán)鏈表A,B,知道其頭指針為:pHeadA,pHeadB,請(qǐng)寫一函數(shù)將兩鏈表中data值相同的結(jié)點(diǎn)刪除。
聯(lián)想五道筆試題
37、1)、設(shè)計(jì)函數(shù) int atoi(char *s)。
2)、int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 輸出是多少?
3)、解釋局部變量、全局變量和靜態(tài)變量的含義,
資料共享平臺(tái)
《微軟、百度、聯(lián)想等名企C++筆試題匯總》(http://www.msguai.com)。4)、解釋堆和棧的區(qū)別。
5)、論述含參數(shù)的宏與函數(shù)的優(yōu)缺點(diǎn)。
38、順時(shí)針打印矩陣
題目:輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。
例如:如果輸入如下矩陣:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
則依次打印出數(shù)字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。
分析:包括Autodesk、EMC在內(nèi)的多家公司在面試或者筆試?yán)锊捎眠^這道題。
39、對(duì)稱子字符串的最大長(zhǎng)度
題目:輸入一個(gè)字符串,輸出該字符串中對(duì)稱的子字符串的最大長(zhǎng)度。
比如輸入字符串“google”,由于該字符串里最長(zhǎng)的對(duì)稱子字符串是“goog”,因此輸出4。
分析:可能很多人都寫過判斷一個(gè)字符串是不是對(duì)稱的函數(shù),這個(gè)題目可以看成是該函數(shù)的加
強(qiáng)版。
40、用1、2、2、3、4、5這六個(gè)數(shù)字,寫一個(gè)main函數(shù),打印出所有不同的排列,
如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連.
41、微軟筆試題
一個(gè)有序數(shù)列,序列中的每一個(gè)值都能夠被2或者3或者5所整除,1是這個(gè)序列的第一個(gè)元素。求第1500個(gè)值是多少?
網(wǎng)易五道游戲筆試題
42、兩個(gè)圓相交,交點(diǎn)是A1,A2。現(xiàn)在過A1點(diǎn)做一直線與兩個(gè)圓分別相交另外一點(diǎn)B1,B2。
B1B2可以繞著A1點(diǎn)旋轉(zhuǎn)。問在什么情況下,B1B2最長(zhǎng)
43、Smith夫婦召開宴會(huì),并邀請(qǐng)其他4對(duì)夫婦參加宴會(huì)。在宴會(huì)上,他們彼此握手,
并且滿足沒有一個(gè)人同自己握手,沒有兩個(gè)人握手一次以上,并且夫妻之間不握手。
然后Mr. Smith問其它客人握手的次數(shù),每個(gè)人的答案是不一樣的。
求Mrs Smith握手的次數(shù)
44、有6種不同顏色的球,分別記為1,2,3,4,5,6,每種球有無數(shù)個(gè),F(xiàn)在取5個(gè)球,求在一下的條件下:
1、5種不同顏色,
2、4種不同顏色的球,
3、3種不同顏色的球,
4、2種不同顏色的球,
它們的概率。
45、有一次數(shù)學(xué)比賽,共有A,B和C三道題目。所有人都至少解答出一道題目,總共有25人。
在沒有答出A的人中,答出B的人數(shù)是答出C的人數(shù)的兩倍;單單答出A的人,比其他答出A的人總數(shù)多1;在所有只有答出一道題目的人當(dāng)中,答出B和C的人數(shù)剛好是一半。
求只答出B的人數(shù)。
46、從尾到頭輸出鏈表
題目:輸入一個(gè)鏈表的頭結(jié)點(diǎn),從尾到頭反過來輸出每個(gè)結(jié)點(diǎn)的'值。鏈表結(jié)點(diǎn)定義如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
分析:這是一道很有意思的面試題。該題以及它的變體經(jīng)常出現(xiàn)在各大公司的面試、筆試題中。
47、金幣概率問題(威盛筆試題)
題目:10個(gè)房間里放著隨機(jī)數(shù)量的金幣。每個(gè)房間只能進(jìn)入一次,并只能在一個(gè)房間中拿金幣。
一個(gè)人采取如下策略:前四個(gè)房間只看不拿。隨后的房間只要看到比前四個(gè)房間都多的金幣數(shù),就拿。否則就拿最后一個(gè)房間的金幣?
編程計(jì)算這種策略拿到最多金幣的概率。
48、找出數(shù)組中唯一的重復(fù)元素
1-1000放在含有1001個(gè)元素的數(shù)組中,只有唯一的一個(gè)元素值重復(fù),其它均只出現(xiàn)一次.
每個(gè)數(shù)組元素只能訪問一次,設(shè)計(jì)一個(gè)算法,將它找出來;不用輔助存儲(chǔ)空間,能否設(shè)計(jì)一個(gè)算法實(shí)現(xiàn)?
49、08百度校園招聘的一道筆試題
題目大意如下:
一排N(最大1M)個(gè)正整數(shù)+1遞增,亂序排列,第一個(gè)不是最小的,把它換成-1,
最小數(shù)為a且未知求第一個(gè)被-1替換掉的數(shù)原來的值,并分析算法復(fù)雜度。
50、一道SPSS筆試題求解
題目:輸入四個(gè)點(diǎn)的坐標(biāo),求證四個(gè)點(diǎn)是不是一個(gè)矩形
關(guān)鍵點(diǎn):
1.相鄰兩邊斜率之積等于-1,
2.矩形邊與坐標(biāo)系平行的情況下,斜率無窮大不能用積判斷。
3.輸入四點(diǎn)可能不按順序,需要對(duì)四點(diǎn)排序。
51、矩陣式螺旋輸出
52、求兩個(gè)或N個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)。
53、最長(zhǎng)遞增子序列
題目描述:設(shè)L=是n個(gè)不同的實(shí)數(shù)的序列,L的遞增子序列是這樣一個(gè)子序列
Lin=,其中k1
求最大的m值。
54、字符串原地壓縮
題目描述:“eeeeeaaaff" 壓縮為 "e5a3f2",請(qǐng)編程實(shí)現(xiàn)。
55、字符串匹配實(shí)現(xiàn)
請(qǐng)以倆種方法,回溯與不回溯算法實(shí)現(xiàn)。
56、一個(gè)含n個(gè)元素的整數(shù)數(shù)組至少存在一個(gè)重復(fù)數(shù),
請(qǐng)編程實(shí)現(xiàn),在O(n)時(shí)間內(nèi)找出其中任意一個(gè)重復(fù)數(shù)。
57、求最大重疊區(qū)間大小
題目描述:請(qǐng)編寫程序,找出下面“輸入數(shù)據(jù)及格式”中所描述的輸入數(shù)據(jù)文件中最大重疊區(qū)間的大小。
對(duì)一個(gè)正整數(shù) n ,如果n在數(shù)據(jù)文件中某行的兩個(gè)正整數(shù)(假設(shè)為A和B)之間,即A<=n<=B或A>=n>=B ,則 n 屬于該行;
如果 n 同時(shí)屬于行i和j ,則i和j有重疊區(qū)間;重疊區(qū)間的大小是同時(shí)屬于行i和j的整數(shù)個(gè)數(shù)。
例如,行(10 20)和(12 25)的重疊區(qū)間為 [12 20] ,其大小為9,行(20 10)和( 20 30 )的重疊區(qū)間大小為 1 。
58、整數(shù)的素?cái)?shù)和分解問題
歌德巴赫猜想說任何一個(gè)不小于6的偶數(shù)都可以分解為兩個(gè)奇素?cái)?shù)之和。
對(duì)此問題擴(kuò)展,如果一個(gè)整數(shù)能夠表示成兩個(gè)或多個(gè)素?cái)?shù)之和,則得到一個(gè)素?cái)?shù)和分解式。
對(duì)于一個(gè)給定的整數(shù),輸出所有這種素?cái)?shù)和分解式。
注意,對(duì)于同構(gòu)的分解只輸出一次(比如5只有一個(gè)分解2 + 3,而3 + 2是2 + 3的同構(gòu)分解式)。
例如,對(duì)于整數(shù)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)的時(shí)間,O(1)的空間將這個(gè)序列順序改為a1,b1,a2,b2,a3,b3,...,an,bn,
且不需要移動(dòng),通過交換完成,只需一個(gè)交換空間。
例如,N=9時(shí),第2步執(zhí)行后,實(shí)際上中間位置的兩邊對(duì)稱的4個(gè)元素基本配對(duì),
只需交換中間的兩個(gè)元素即可,如下表所示。顏色表示每次要交換的元素,左邊向右交換,右邊向左交換。
交換過程如下表所示
交換x1,x3;交換x2,x4;再交換中間的x1,x4;交換y1,y2。
60、百度筆試題
給定一個(gè)存放整數(shù)的數(shù)組,重新排列數(shù)組使得數(shù)組左邊為奇數(shù),右邊為偶數(shù)。
要求:空間復(fù)雜度O(1),時(shí)間復(fù)雜度為O(n)。
【微軟、百度、聯(lián)想等名企C++筆試題匯總】相關(guān)文章:
4.名企筆試題
5.名企筆試題1
6.名企筆試題2
7.名企筆試題3
8.名企筆試題5