IT名企面试:IBM笔试题

{ Posted on 星期四, 八月 25, 2011 by Kaiser.XKw }

在IBM公司进行面试的时候,首先考察的则是基础知识。那么下面就总结了一些IBM笔试题,以供大家参考。

IBM笔试题:有一座山,山上有座庙,只有一条路可以从山上的庙到山脚,每周一早上8点,有一个聪明的小和尚去山下化缘,周二早上8点从山脚回山上的庙里,小和尚的上下山的速度是任意的,在每个往返中,他总是能在周一和周二的同一钟点到达山路上的同一点。例如,有一次他发现星期一的8点30和星期二的8点30他都到了山路靠山脚的3/4的地方,问这是为什么?

答案一:

可以用画图法来解释:

在一个平面上,x 轴代表从8点开始的时间,y 轴代表距庙的距离。那么从庙到山脚就是一条从左下到右上的一条曲线,从山脚到庙就是一条从左上到右下的一条曲线。考虑到两条曲线的起始点和终点,两线必定交于一点。

答案二:

还有一种更简单的解释,是让两个人从山顶和山脚同时相向而行,一定有一个时刻相遇,这样就证明了。

IBM笔试题:在一个平面上画1999条直线,最多能将这一平面划分成多少个部分?

没有直线时有一个空间;(1)

1条直线时,这条这些可以将这个空间分成两个;(1+1)

2条直线时,第二条直线可以和第一条直线相交,这样第二条直线可以将两个空间分成四个;(1+1+2)

....

注意到画每条直线时能增加多少个空间,取决于此直线从多少个空间中通过。

而从多少个空间中通过,取决于和多少条直线相交。

例如,如果一条直线和其它5条直线相交,那么最大可以通过6个空间,此直线可以增加6个子空间。

画每条直线时,能相交的直线数为总的已经画过的直线。

所以总的空间数最多为

1+1+2+3+...+1999 = 1999001

IBM笔试题:不均匀分布的香,每根香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?

第一根点燃两头,第二根只点一头。

当第一根烧完时,时间过去了30分钟,所以第二根还能烧30分钟。这时点燃第二根的另外一头,第二根香还能烧的时间就是15分钟。

IBM笔试题:有27个人去买矿泉水,商店正好在搞三个空矿泉水瓶可以换一瓶矿泉水的活动,他们至少要买几瓶矿泉水才能每人喝到一瓶矿泉水?

答案一:

如果开始买3瓶,那么可以四个人喝,并且还能剩一个空瓶。

如果开始买9瓶,可以13个人喝,最后还剩一个空瓶。

如果开始买18瓶,那么26个人喝,可以剩下两个空瓶。

如果开始买19瓶,那么27个人喝,最后剩下三个空瓶。所以最少买19瓶。

如果可以向商店先欲借一个空瓶,那么买18瓶,最后一个人喝完再将空瓶还给商店。

那么买18瓶也可以满足要求。

答案二:

x + x/3 + x/3^2 + ... = x/(1-1/3)=27

x=18;

IBM笔试题:c++中引用和指针有什么不同?指针加上什么限制等于引用?

引用不是一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。引用一经确定就不能修改。

指针是一个变量,需要在内存中分配空间,此空间中存储所指对象的地址。由于指针是一个普通变量,所以其值还可以通过重新赋值来改变。

把指针定义为const后,其值就不能改变了,功能和引用类似,但有本质的区别。

IBM笔试题:一普查员问一女人,“你有多少个孩子,他们多少岁?”

女人回答:“我有三个孩子,他们的岁数相乘是36,岁数相加就等于旁边屋的门牌号码。“普查员立刻走到旁边屋,看了一看,回来说:“我还需要多少资料。”女人回答:“我现在很忙,我最大的孩子正在楼上睡觉。”普查员说:”谢谢,我己知道了。”

问题:那三个孩子的岁数是多少。

36 = 1 × 2 × 2 × 3 × 3

所有的可能为

1,1,36;sum = 38

1,2,18;sum = 21

1,3,12;sum = 16

1,4,9;sum = 14

1,6,6;sum = 13

2,2,9;sum = 13

2,3,6;sum = 11

3,3,4;sum = 10

由于普查员知道了年龄和之后还是不能确定每个孩子的年龄,所以可能性为

1,6,6;sum = 13

2,2,9;sum = 13

由于最大(暗含只有一个最大)的孩子在睡觉,所以只可能是

2,2,9;sum = 13

一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。

小猴子可以采用如下策略:

小猴子先搬50根,走到1米处,路上吃掉1根,放下48根后返回起始点,并在返回路上吃剩下的1根。然后将起始点处的50根香蕉搬到1米处,又在路上吃掉1根。这样总共消耗了3根香蕉,将所有香蕉向前搬动了1米。采用类似的策略搬动16米后,总共消耗了48根香蕉,还剩下52根香蕉。

如果继续按照同样的策略向前移动到17米处,则剩下49根香蕉;如果直接在16米处丢掉2根香蕉,搬着50根香蕉向前走,在17米处也是有49根香蕉。所以猴子在17米处最多可以保留49根香蕉。

继续搬到家还有33米,所以最后剩的香蕉数16根。

IBM笔试题:妈妈有2000元,要分给她的2个孩子。由哥哥先提出分钱的方式,如果弟弟同意,那么就这么分。但如果弟弟不同意,妈妈会没收1000元,由弟弟提出剩下 1000元的分钱方式,这时如果哥哥同意了,就分掉这剩下的1000元。但如果哥哥也不同意,妈妈会把剩下的1000元也拿走,然后分别只给他们每人100元。

问:如果你是哥哥,你会提出什么样的分钱方式,使你有可能得到最多的钱?(最小单位1元)

此题和海盗分金问题有些相似。(可以在本博客中找到关于海盗分金的问题和解答。)

哥哥提出分配方案时,弟弟是否同意取决于拒绝后是否可以获得更多利益。弟弟分配时,哥哥是否同意也取决于拒绝后是否可以获得更多好处。

所以采取由后向前推导的方法。

如果在两次分配中弟弟和哥哥都不同意,则弟弟和哥哥各获得100元。

弟弟分钱时,为保证哥哥同意,会提出哥哥101元,弟弟899元的分配方法。因为哥哥获得了比拒绝后的更多利益,所以必然会同意。

哥哥分钱时,为保证弟弟同意,会提出哥哥1100元,弟弟900元的分配方法。因为弟弟获得了比拒绝后的更多利益,所以必然会同意。

也就是说,最终哥哥会提出哥哥1100元,弟弟900元的分配方法。

IBM笔试题:有三个酒杯,其中两个大酒杯每个可以装8两酒,一个可以装3两酒。现在两个大酒杯都装满了酒,只用这三个杯子怎么把酒平均的分给4个人喝?

总共16两酒,4个人喝,平均每人喝4两。

假设下面的三个数是8两,8两和4两酒杯中的酒。

8 8 0

8 5 3

第一个人先喝3两,变成

8 5 0

8 2 3

第二个人先喝2两,变成

8 0 3

8 3 0

5 3 3

5 6 0

2 6 3

2 8 1

第一个人再喝1两,就刚刚喝了4两,变成

2 8 0

0 8 2

0 7 3

3 7 0

3 4 3

6 4 0

6 1 3

第三个人先喝1两,变成

6 0 3

8 0 1

第四个人先喝1两,变成

8 0 0

5 0 3

第三个人再喝3两,就刚刚喝了4两,变成

5 0 0

2 0 3

第二个人再喝2两,就刚刚喝了4两,变成

0 0 3

第四个人再喝3两,就刚刚喝了4两

为了平均,每个人需要喝4两。考虑到我们有一个3两的杯子,所以问题的关键是如何量出尽可能多的1两。

由于3*3-8=1,我们可以将3杯3两倒入8两杯中,剩下的就是1两。用这个方法,我么可以在总数为9两,10两和11两时3次量出1两酒。

所以解题步骤就成为首先量出3两和2两,这时剩下11两,然后量出3次1两酒,然后再2次量出3两酒,最后剩下2两。

IBM笔试题:16个硬币,A和B轮流拿走一些,每次拿走的个数只能是1,2,4中的一个数。谁最后拿硬币谁输。

问:A或B有无策略保证自己赢?

B可以保证自己赢。

如果A拿1个,则B拿2个;如果A拿2个,则B拿1个;如果A拿4个,则B拿2个。这样每次AB加起来都是3或者6,所以最后会剩下1个或4个。如果是1个则A直接输了;如果剩下4个,A全拿则输了,如果不全拿,B继续采取上面的策略,最后还是剩下1个,还是A输。

IBM笔试题:村子中有50个人,每人有一条狗。在这50条狗中有病狗(这种病不会传染)。于是人们就要找出病狗。每个人可以观察其他的49条狗,以判断它们是否生病,只有自己的狗不能看。观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的是病狗就要枪毙自己的狗,而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗。第一天,第二天都没有枪响。到了第三天传来一阵枪声,问有几条病狗,如何推算得出?

答案:

假设有1条病狗,病狗的主人会看到其他狗都没有病,那么就知道自己的狗有病,所以第一天晚上就会有枪响。因为没有枪响,说明病狗数大于1。

假设有2条病狗,病狗的主人会看到有1条病狗,因为第一天没有听到枪响,是病狗数大于1,所以病狗的主人会知道自己的狗是病狗,因而第二天会有枪响。既然第二天也每有枪响,说明病狗数大于2。

由此推理,如果第三天枪响,则有3条病狗。

IBM笔试题:开关和灯泡的对应关系?

在房里有三盏灯,房外有三个开关,在房外看不见房内的情况,你只能进门一次,你用什么方法来区分哪个开关控制哪一盏灯?

答案:

设三个开关是1、2、3。打开开关1等半个小时,关上开关1并打开开关2。

进房后去摸灯泡,热的是开关1对应的灯泡;亮的是开关2对应的灯泡;不亮不热的是开关3对应的灯泡。

分析:

首先想到的就是通过打开不同的开关,进去后看灯是否亮来找出对应关系。可能打开的开关数量只有0,1,2,3共四种情况,没有一种情况能解决这个问题。所以必须找到其它的信号。鉴于灯泡亮一段时间后会发热,我们可以使用灯的热度作为一个信号。这样我们就有了热且亮,热不亮,亮不热,不热不亮四种状态,足以用来区分三只灯泡了。

这个题可以理解成一个编码问题,灯泡的状态作为编码空间,进屋的次数作为编码位数。

如果只使用灯泡是否亮来判断,题目就相当于用一位二进制数来表示三种状态,是不可能的事情。加入了灯泡是否热后,就相当于用一位四进制数来表示三种状态,足够了。

此题的一些可能变化:

1. 在房里有四盏灯,房外有四个开关,在房外看不见房内的情况,你只能进门一次,你用什么方法来区分哪个开关控制哪一盏灯?

2. 在房里有n盏灯,房外有n个开关,在房外看不见房内,且进门后只能观察灯的亮度的情况下,你需要进门多少次才能区分哪个开关控制哪一盏灯?

3. 在房里有n盏灯,房外有n个开关,每个开关有三种状态(开,关,半开(亮度为开的一半))在房外看不见房内,且进门后只能观察等的亮度的情况下,你需要进门多少次才能区分哪个开关控制哪一盏灯?

答案:

1.用上面你说的四种状态热且亮,热不亮,亮不热,不热不亮就可以一次确定了

2. 至少需要进门n/3次吧

3 加入一种状态,应该需要n/6

No Response to "IT名企面试:IBM笔试题"