一些有趣的面试智力题
反串艺人-
文档来源为
:
从网络收集整理
< br>.word
版本可编辑
.
欢迎下
载支持
.
有几个题目在国内流传相当广,
什么
n
个人怎么分饼最公平,
屋里
的三个灯泡分
别由哪个开关控制,三架飞机环游世界,用火柴和两根绳子测量
45
分钟之类的
题目,火星得已经可以考古了,这
里就不再说了。个别题目本
Blog
原来有过详
细的介绍,这里也不再提了。
1.
考虑一个双人游戏。
游戏在一个圆桌上进行。
每个游戏者都有足
够多
的硬币。
他们需要在桌子上轮流放置硬币,
每次必需且只能放置一枚硬币,
要求
硬币完全置于桌面
内
(不能有一部分悬在桌子外面)
,
并
且不能与原来放过的硬
币重叠。
谁没有地方放置新的硬币,
p>
谁就输了。
游戏的先行者还是后行者有必胜
策略?这种策略是什么?
答案:先行者在桌子中心放置一枚
硬币,以后的硬币总是放在与后行者
刚才放的地方相对称的位置。这样,只要后行者能放
,先行者一定也有地方放。
先行者必胜。
2.
用线性时间和常数附加空间将一篇文章的单词(不是字符)倒序。
答案:先将整篇文章的所有字符逆序(从两头起不断交换位置相对称的
< br>字符);然后用同样的办法将每个单词内部的字符逆序。这样,整篇文章的单词
顺
序颠倒了,但单词本身又被转回来了。
3.
用线性时间和常数附加空间将一个长度为
n
的字符串向左循环移
动
m
位(例如,”abcdefg”移动
3
位就变成了”defgabc”)。
p>
答案:把字符串切成长为
m
和
n-m
的两半。将这两个部分分别逆序,再
对整个字
符串逆序。
4.
一个矩形蛋糕,
蛋糕内部有一块矩形的空洞。
只用一刀,
如何将蛋
糕
切成大小相等的两块?
答案:
注意到平分矩形面积的线都经过矩形的中心。过大矩形和空心矩
形各自的中心画一条线,
这条线显然把两个矩形都分成了一半,
它们的差当然也
是相等的。
5.
一块矩形的巧克力,初始时由
N
x
M
个小块组成。每一次你只能把一
块巧
克力掰成两个小矩形。最少需要几次才能把它们掰成
N x M
块
1×1
的小巧
克力?
答案:
N x M - 1
次显然足够了。这个数目也是必需的,因为每掰一次
后当前巧克力的块数
只能增加一,把巧克力分成
N x
M
块当然需要至少掰
N x M
-
1
次。
6.
如何快速找出一个
32
位整数的二进制表达里有多少个”1″?用关
于”1″的个数的线性时间?
答案
1<
/p>
(关于数字位数线性):
for(n=0; b; b >>=
1) if (b & 1) n++;
答案
2<
/p>
(关于”1″的个数线性):
for(n=0; b; n++)
b &= b-1;
7.
一个大小为
N
的数组,所有数都是不超过
N-1
的正整数。用
O(N)
的
时间找出重复的那个数(假设只有
一个)。一个大小为
N
的数组,所有数都是不
< br>超过
N+1
的正整数。用
O(N
)
的时间找出没有出现过的那个数(假设只有一个)。
1
文档来源为
:
从网络收集整理
.word
版本可编辑
.
欢迎下载支持
.
答案:
计算数组中的所有数的和,再计算出从
1
到
N-1
的所有数的和,
两者之差即为重复的那个数。计算数
组中的所有数的和,再计算出从
1
到
N
+1
的所有数的和,两者之差即为缺少的那个数。
8.
给出一行
C
语言表达式,判断给定的整
数是否是一个
2
的幂。
答案:
(b & (b-1)) == 0
9.
地球上有多少个点,使得从该点出发向南走一英里,向东走一英里,
再向北走一英里之后恰好回到了起点?
答案:
“北极点”是一个传统的答案,其实这个问题还有其它的答案。
事实上,满足要求的点有
无穷多个。所有距离南极点
1 + 1/(2π)英里的地方都
是满足要求的,向南走一英里后到达距离南极点
1/(2π)的地方,向东走一英里
p>
后正好绕行纬度圈一周,
再向北走原路返回到起点。
事实上,
这仍然不是满足要
求的全部点。距离南极点<
/p>
1 + 1/(2kπ)的地方都是可以的,其中
k
可以是任意
一个正整数。
10.
A
、
B
两人分别在两座岛上。
B
生病了,
A
有
p>
B
所需要的药。
C
有一艘
小船和一个可以上锁的箱子。
C
愿意在
A
和
B
之间运东西,但东西只能放在箱子
里。只要箱子没被上锁,
C<
/p>
都会偷走箱子里的东西,不管箱子里有什么。如果
A
和
B
各自有一把锁和只能开自己那把锁的钥匙,
p>
A
应该如何把东西安全递交给
B
?
答案:
A
把药放进箱子,用自己的锁把箱子锁上。
B
拿到箱子后,再在箱
子上加一把自己的锁。箱子运回
A
p>
后,
A
取下自己的锁。箱子再运到
B
手中时,
B
取下自己
的锁,获得药物。
11.
一对夫妇邀请
N-1
对夫妇参加聚会
(因此聚会上总共有
2N
人)
。
每
个人都和所有自己不认识的人握了一次手。
然后,
男主人问其余所有人
(共
2N-1
个人)
各自都握了几次手,
得到的答案全部都不一样。
假设每个人都认识自己的
配偶,那么女主人握了几次手?
答案:握手次数只可能是从
0
到
2N-2
这
2N-
1
个数。除去男主人外,一
共有
2N-
1
个人,
因此每个数恰好出现了一次。
其中有一个人
(0)
没有握手,
有一<
/p>
个人
(2N-2)
和所有其它的夫妇都握
了手。
这两个人肯定是一对夫妻,
否则后者将
< br>和前者握手(从而前者的握手次数不再是
0
)。除去这对
夫妻外,有一个人
(1)
只与
(2N-
2)
握过手,有一个人
(2N-3)
和
除了
(0)
以外的其它夫妇都握了手。这两
个人肯定是一对夫妻,
否则后者将和前者握手
(从而前者的
握手次数不再是
1
)
。
以此类推,
直到握过
N-2
次
手的人和握过
N
次手的人配成一对。
此
时,
除了男主
人及其配偶以外,
其余所
有人都已经配对。
根据排除法,
最后剩下来的那个握手
次数为
N-1
的人就是女主人了。
12.
两个机器人,
初
始时位于数轴上的不同位置。
给这两个机器人输入一段相同
的程
序,
使得这两个机器人保证可以相遇。
程序只能包含“左移
p>
n
个单位”、
“右
移
n
个单位”,
条件判断语句
If
,
循环语句
whi
le
,
以及两个返回
Boolean<
/p>
值的
函数“在自己的起点处”和“在对方的起点处”。
你不能使用其它的变量和计数
器。
p>
答案:两个机器人同时开始以单位速度右移,直到一个机器人走到另外
一个机器人的起点处。然后,该机器人以双倍速度追赶对方。程序如下。
2