标签:兴趣研究
1.你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费?程序员有趣的面试智力题
偶然间在网上看到几个原来没见过的面试智力题,有几个题目在国内流传相当广,什么 n个人怎么分饼最公平,屋里的三个灯泡分别由哪个开关控制,三架飞机环游世界,用火柴和两根绳子测量 45分钟之类的题目,火星得已经可以考古了,这里就不再说了。
1、考虑一个双人游戏。游戏在一个圆桌上进行。每个游戏者都有足够多的硬币。他们需要在桌子上轮流放置硬币,每次必需且只能放置一枚硬币,要求硬币完全置 于桌面内(不能有一部分悬在桌子外面),并且不能与原来放过的硬币重叠。谁没有地方放置新的硬币,谁就输了。游戏的先行者还是后行者有必胜策略?这种策略 是什么?
答案:先行者在桌子中心放置一枚硬币,以后的硬币总是放在与后行者刚才放的地方相对称的位置。这样,只要后行者能放,先行者一定也有地方放。先行者必胜。
2、 用线性时间和常数附加空间将一篇文章的单词(不是字符)倒序。
答案:先将整篇文章的所有字符逆序(从两头起不断交换位置相对称的字符);然后用同样的办法将每个单词内部的字符逆序。这样,整篇文章的单词顺序颠倒了,但单词本身又被转回来了。
3、 用线性时间和常数附加空间将一个长度为 n的字符串向左循环移动m位(例如, "abcdefg"移动3 位就变成了"defgabc")。
答案:把字符串切成长为 m和n-m 的两半。将这两个部分分别逆序,再对整个字符串逆序。
4、一个矩形蛋糕,蛋糕内部有一块矩形的空洞。只用一刀,如何将蛋糕切成大小相等的两块?
答案:注意到平分矩形面积的线都经过矩形的中心。过大矩形和空心矩形各自的中心画一条线,这条线显然把两个矩形都分成了一半,它们的差当然也是相等的。
5、 一块矩形的巧克力,初始时由 N
x M个小块组成。每一次你只能把一块巧克力掰成两个小矩形。最少需要几次才能把它们掰成 N x M块1x1 的小巧克力?
答案: N
x M - 1次显然足够了。这个数目也是必需的,因为每掰一次后当前巧克力的块数只能增加一,把巧克力分成 N x M块当然需要至少掰N
x M - 1次。
6、如何快速找出一个 32位整数的二进制表达里有多少个 "1"?用关于"1" 的个数的线性时间?
答案1 (关于数字位数线性): for(n=0;
b; b >>= 1) if (b & 1) n++;
答案 2(关于"1" 的个数线性): for(n=0;
b; n++) b &= b-1;
7、 一个大小为N 的数组,所有数都是不超过 N-1的正整数。用O(N)的时间找出重复的那个数(假设只有一个)。一个大小为 N的数组,所有数都是不超过 N+1的正整数。用O(N)的时间找出没有出现过的那个数(假设只有一个)。
答案:计算数组中的所有数的和,再计算出从 1到N-1 的所有数的和,两者之差即为重复的那个数。计算数组中的所有数的和,再计算出从 1到N+1 的所有数的和,两者之差即为缺少的那个数。
8、 给出一行C 语言表达式,判断给定的整数是否是一个 2的幂。
答案:(b
& (b-1)) == 0
9、地球上有多少个点,使得从该点出发向南走一英里,向东走一英里,再向北走一英里之后恰好回到了起点?
答案: “北极点” 是一个传统的答案,其实这个问题还有其它的答案。事实上,满足要求的点有无穷多个。所有距离南极点 1
+ 1/(2π)英里的地方都是满足要求的,向南走一英里后到达距离南极点 1/(2π)的地方,向东走一英里后正好绕行纬度圈一周,再向北走原路返回到起点。 事实上,这仍然不是满足要求的全部点。距离南极点 1
+ 1/(2kπ)的地方都是可以的,其中 k可以是任意一个正整数。
10、 A、B 两人分别在两座岛上。 B生病了,A 有B所需要的药。 C有一艘小船和一个可以上锁的箱子。 C愿意在A 和B之间运东西,但东西只能放在箱子里。只 要箱子没被上锁,C都会偷走箱子里的东西,不管箱子里有什么。如果 A和B 各自有一把锁和只能开自己那把锁的钥匙, A应该如何把东西安全递交给 B?
答案: A把药放进箱子,用自己的锁把箱子锁上。 B拿到箱子后,再在箱子上加一把自己的锁。箱子运回 A后,A 取下自己的锁。箱子再运到 B手中时,B 取下自己的锁,获得药物。
11、 一对夫妇邀请N-1对夫妇参加聚会(因此聚会上总共有 2N人)。每个人都和所有自己不认识的人握了一次手。然后,男主人问其余所有人(共 2N-1个人)各自都握了几次手,得到的答案全部都不一样。假设每个人都认识自己的配偶,那么女主人握了几次手?
答案:握手次数只可能是从 0到2N-2 这2N-1个数。除去男主人外,一共有 2N-1个人,因此每个数恰好出现了一次。其中有一个人 (0)没有握手,有一 个人 (2N-2)和所有其它的夫妇都握了手。这两个人肯定是一对夫妻,否则后者将和前者握手(从而前者的握手次数不再是 0)。除去这对夫妻外,有一个人 (1)只与(2N-2) 握过手,有一个人 (2N-3)和除了(0) 以外的其它夫妇都握了手。这两个人肯定是一对夫妻,否则后者将和前者握手(从而前者的握 手次数不再是1)。以此类推,直到握过 N-2次手的人和握过N次手的人配成一对。此时,除了男主人及其配偶以外,其余所有人都已经配对。根据排除法,最后 剩下来的那个握手次数为 N-1的人就是女主人了。
12、两个机器人,初始时位于数轴上的不同位置。给这两个机器人输入一段相同的程序,使得这两个机器人保证可以相遇。程序只能包含 “左移n 个单位”、 “右 移n个单位 ”,条件判断语句If,循环语句 while,以及两个返回Boolean值的函数 “在自己的起点处”和 “在对方的起点处”。你不能使用其它的变 量和计数器。
答案:两个机器人同时开始以单位速度右移,直到一个机器人走到另外一个机器人的起点处。然后,该机器人以双倍速度追赶对方。程序如下。
while(!at_other_robots_start) {
move_right 1
}
while(true) {
move_right 2
}
13、 如果叫你从下面两种游戏中选择一种,你选择哪一种?为什么?
a. 写下一句话。如果这句话为真,你将获得 10美元;如果这句话为假,你获得的金钱将少于 10美元或多于10 美元(但不能恰好为 10美元)。
b. 写下一句话。不管这句话的真假,你都会得到多于 10美元的钱。
答案:选择第一种游戏,并写下 “我既不会得到10美元,也不会得到 10000000美元” 。
15、某种药方要求非常严格,你每天需要同时服用 A、B 两种药片各一颗,不能多也不能少。这种药非常贵,你不希望有任何一点的浪费。一天,你打开装药片 A 的药瓶,倒出一粒药片放在手心;然后打开另一个药瓶,但不小心倒出了两粒药片。现在,你手心上有一颗药片 A,两颗药片B ,并且你无法区别哪个是 A,哪个是 B。你如何才能严格遵循药方服用药片,并且不能有任何的浪费?
答案:把手上的三片药各自切成两半,分成两堆摆放。再取出一粒药片 A,也把它切成两半,然后在每一堆里加上半片的 A。现在,每一堆药片恰好包含两个半片的 A和两个半片的B。一天服用其中一堆即可。
16、 你在一个飞船上,飞船上的计算机有 n个处理器。突然,飞船受到外星激光武器的攻击,一些处理器被损坏了。你知道有超过一半的处理器仍然是好的。你可以向一 个处理器询问另一个处理器是好的还是坏的。一个好的处理器总是说真话,一个坏的处理器总是说假话。用 n-2次询问找出一个好的处理器。
答 案:给处理器从 1到n 标号。用符号 a->b表示向标号为a的处理器询问处理器 b是不是好的。首先问1->2,如果 1说不是,就把他们俩都去掉 (去掉了一个好的和一个坏的,则剩下的处理器中好的仍然过半),然后从 3->4开始继续发问。如果1说 2是好的,就继续问 2->3, 3->4,…… 直到某一次j说 j+1是坏的,把j 和j+1去掉,然后问 j-1
-> j+2;或者从 j+2 -> j+3开始发问,如果前面已经没有 j-1了(之前已经被去掉过了)。注意到你始终维护着这样一个 “链” ,前面的每一个处理器都说后面那个是好的。这条链里 的所有处理器要么都是好的,要么都是坏的。当这条链越来越长,剩下的处理器越来越少时,总有一个时候这条链超过了剩下的处理器的一半,此时可以肯定这条链 里的所有处理器都是好的。或者,越来越多的处理器都被去掉了,链的长度依旧为 0,而最后只剩下一个或两个处理器没被问过,那他们一定就是好的了。另外注意 到,第一个处理器的好坏从来没被问过,仔细想想你会发现最后一个处理器的好坏也不可能被问到(一旦链长超过剩余处理器的一半,或者最后没被去掉的就只剩这 一个了时,你就不问了),因此询问次数不会超过 n-2。
17、一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?
答案:你可以把两个相机放在圆盘上相近的两点,然后观察哪个点先变色。事实上,只需要一个相机就够了。控制相机绕圆盘中心顺时针移动,观察颜色多久变一 次;然后让相机以相同的速度逆时针绕着圆盘中心移动,再次观察变色的频率。可以断定,变色频率较慢的那一次,相机的转动方向是和圆盘相同的。
18、 有25匹马,速度都不同,但每匹马的速度都是定值。现在只有 5条赛道,无法计时,即每赛一场最多只能知道 5匹马的相对快慢。问最少赛几场可以找出 25匹马中速度最快的前3名? (百度2008 年面试题)
每匹马都至少要有一次参赛的机会,所以 25匹马分成5 组,一开始的这 5场比赛是免不了的。接下来要找冠军也很容易,每一组的冠军在一起赛一场就行了 (第6 场)。最后就是要找第 2和第3 名。我们按照第 6场比赛中得到的名次依次把它们在前 5场比赛中所在的组命名为 A、B 、C、 D、E 。即:A组的冠军是第 6场的第1 名,B组的冠军是第 6场的第2 名……每一组的 5匹马按照他们已经赛出的成绩从快到慢编号:
A组: 1,2,3, 4,5
B组:1, 2,3 ,4, 5
C组:1, 2,3 ,4, 5
D组:1, 2,3 ,4, 5
E组:1, 2,3 ,4, 5
从现在所得到的信息,我们可以知道哪些马已经被排除在 3名以外。只要已经能确定有 3匹或3 匹以上的马比这匹马快,那么它就已经被淘汰了。可以看到, 只有上表中粗体的那5匹马是有可能为 2、3 名的。即: A组的2 、3名; B组的1 、2名, C组的第1 名。取这 5匹马进行第7场比赛,第 7场比赛的前两名就是 25匹马中的 2、3 名。故一共最少要赛 7场。
这道题有一些变体,比如 64匹马找前4 名。方法是一样的,在得出第 1名以后寻找后3名的候选竞争者就可以了。
1、一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?
2、有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜了的布质、大小完全相同, 而每对袜了都有一张商标纸连着。两位盲人不小心将八对袜了混在一起。他们每人怎样才能取回黑袜和白袜各两对呢?标签:兴趣研究
原文地址:http://blog.csdn.net/cjz_huateng/article/details/40149345