程序员”脑筋急转弯”
题目1
有一个8×8的国际象棋棋盘,对角线两端的方格被去掉了。你有31个多米诺骨牌, 每个骨牌能覆盖棋盘上两个方格。你能用31个多米诺骨牌覆盖整个棋盘吗( 不包含去掉的2个方格)。如果能,请给出覆盖方案;如果不能,请说明为什么。
解答1
这是一道非常经典的问题,详情见:Mutilated chessboard problem。 这道题目的答案是不能。为什么呢?先让我们来看看下面的图。
如果不去掉对角的两个方格,我们可以用32个多米诺骨牌把棋盘完全覆盖, 每个骨牌覆盖两个方格,共覆盖了32*2=64个方格。并且, 每个骨牌正好覆盖一个红色方格和一个黄色方格。也就是,我每往棋盘上放一个骨牌, 棋盘上就少掉一个红色方格和一个黄色方格,这是一个必然事件。那么, 当对角的两个黄色方格被去掉后,剩下32个红色方格和30个黄色方格。 我每放一个骨牌还是会覆盖掉一个红色方格和一个黄色方格,最后的情况是, 剩下2个红色方格。从棋盘上可以看出,任意两个红色方格都无法用一个骨牌覆盖, 因此,这道题目的答案是不能用31个多米诺骨牌将去掉两个角的棋盘覆盖。
这道题目的关键就是棋盘的着色,如果你画一个8×8的白色棋盘, 也许会很茫然的不知如何下手。这道题目推广一下,可以得到以下结论: 从棋盘上任意去掉两个方格,如果去掉方格的颜色是一样的,那么, 我们无法用31个多米诺骨牌将剩余的方格覆盖;如果去掉的方格的颜色是不一样的, 那么,我们一定可以用31个多米诺骨牌将剩余的方格覆盖。
--------------------------------------------------------------------------
题目2
你有两个瓶子,一个可以装5升水,一个可以装3升水, 怎样利用这两个瓶子量出4升水来。
解答2
简单题。先装满5升水,倒到3升的瓶子里,5升的瓶子中剩余2升水;再把3升的瓶子倒空, 把5升瓶子里的2升水倒到3升的瓶子里,3升瓶子还可装1升水;最后装潢5升水, 往3升瓶子里倒,当3升瓶子满时,5升瓶子里就正好装了4升水。
--------------------------------------------------------------------------
题目3
在一个岛上有一群人,他们中有些人的头上被戴上了一顶神奇的帽子(至少有一人戴了帽子), 这顶帽子别人看得到,但戴帽子的人自己看不到。想要去掉这顶帽子, 需要戴着帽子的本人在正好午夜的时候,把自己泡在水里。如果有n个人,c个帽子, 需要多长的时间才能把所有的帽子都摘除。注: 这群人不能相互告诉对方他们的头上是否有帽子。
解答3
也是被问烂的智力题之一了吧。与它类似的一个题目是:村庄里有几条病狗? 这类题目的一个前提是题中的人都要非常聪明,懂推理。不然,题目就没有任何意义了。 这类题目都是从一个条件的最基本情况出发,然后得出规律。比如这道题, 假如只有一个帽子,那么戴着帽子的那个人出去一看,另外n-1个人都没有帽子, 而题目已经说了,至少有一个人是戴着帽子的,所以可以推断唯一一个戴着帽子的就是自己, 于是他会在第1天的午夜泡到水里,去掉头上的帽子。如果有2个帽子, 比如说是A和B戴着,A第1天发现B是戴着帽子的,而A又不知道一共有多少个帽子, 所以他无法判断自己头上是否戴了帽子,因此A第1天什么也不做。同理,B也一样。 到了第二天,A发现B还戴着他的帽子,这就说明了至少要有2顶帽子。否则如果只有一顶, B能推理出来,并且在第一天午夜就去掉它了。如果至少有2顶,B已经戴了一顶, 那么另一顶就在自己(A)头上了,所以A在第2天的午夜去掉了帽子。同理, B也做出了同样的推理,在第2天午夜去掉了帽子。
从以上的分析我们马上可以得出,如果有c个帽子, 那么需要c天的时间才能把所有的帽子去掉,而且这c个人都是在第c天的午夜才摘除帽子的。
--------------------------------------------------------------------------
题目4
有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。
解答4
我们先假设最坏情况下,鸡蛋下落次数为x,即我们为了找出N,一共用鸡蛋做了x次的实验。 那么,我们第一次应该在哪层楼往下扔鸡蛋呢?先让我们假设第一次是在第y层楼扔的鸡蛋, 如果第一个鸡蛋在第一次扔就碎了,我们就只剩下一个鸡蛋,要用它准确地找出N, 只能从第一层向上,一层一层的往上测试,直到它摔坏为止,答案就出来了。 由于第一个鸡蛋在第y层就摔破了, 所以最坏的情况是第二个鸡蛋要把第1到第y-1层的楼都测试一遍,最后得出结果, 噢,原来鸡蛋在第y-1层才能摔破(或是在第y-1层仍没摔破,答案就是第y层。) 这样一来测试次数是1+(y-1)=x,即第一次测试要在第x层。OK, 那如果第一次测试鸡蛋没摔破呢,那N肯定要比x大,要继续往上找,需要在哪一层扔呢? 我们可以模仿前面的操作,如果第一个鸡蛋在第二次测试中摔破了, 那么第二个鸡蛋的测试次数就只剩下x-2次了(第一个鸡蛋已经用了2次)。 这样一来,第二次扔鸡蛋的楼层和第一次扔鸡蛋的楼层之间就隔着x-2层。 我们再回过头来看一看,第一次扔鸡蛋的楼层在第x层,第1层到第x层间共x层; 第1次扔鸡蛋的楼层到第2次扔鸡蛋的楼层间共有x-1层(包含第2次扔鸡蛋的那一层), 同理继续往下,我们可以得出,第2次扔鸡蛋的楼层到第3次扔鸡蛋的楼层间共有x-2层, ……最后把这些互不包含的区间数加起来,应该大于等于总共的楼层数量100,即
1: x + (x-1) + (x-2) + ... + 1 >= 100
2: (x+1)*x/2 >= 100
得出答案是14。
即我先用第1个鸡蛋在以下序列表示的楼层数不断地向上测试,直到它摔破。 再用第2个鸡蛋从上一个没摔破的序列数的下一层开始,向上测试, 即可保证在最坏情况下也只需要测试14次,就能用2个鸡蛋找出从哪一层开始, 往下扔鸡蛋,鸡蛋就会摔破。
14, 27, 39, 50, 60, 69, 77, 84, 90, 95, 99, 100
比如,我第1个鸡蛋是在第77层摔破的,那么我第2个鸡蛋就从第70层开始,向上测试, 第二个鸡蛋最多只需要测试7次(70,71,72,73,74,75,76),加上第1个鸡蛋测试的 7次(14,27,39,50,60,69,77),最坏情况只需要测试14次即可得出答案。
这个问题还有一个泛化的版本,即d层楼,e个鸡蛋,然后设计方案找出N, 使最坏情况下测试的次数最少。
维基上给出了DP的解法,感兴趣的话也可以看看以下链接:
The puzzle of eggs and floors
--------------------------------------------------------------------------
题目5
在过道上有100把上了锁的锁头。有一个人,第一次操作把这100把锁都打开了; 第二次操作,每隔1个锁他就把锁给锁上(即把编号2,4,6…100的锁锁上)。 第三次操作,每隔2个锁他就改变锁的状态,即如果原本是开着的,他就锁上; 原本是锁着的,他就给打开。(操作对象是编号为3,6,9…99的锁)。 当他做完第100次操作后(即只对编号为100的锁操作),打开着的锁有几把?
解答5
简单题。每次就改变一些锁的状态。第1把锁只会在第1次操作时被改变状态, 第2把锁会在第1次及第2次操作时被改变状态,假设能被i整除的数有a,b,c, (包含1和它本身),那么第i把锁会被改变3次,分别是在第a,b,c次操作的时候。 这样一来,对于第i把锁,如果能被i整除的数有奇数个, 那么它最后的状态一定打开的,否则则是关闭的。问题就转换为1到100的数中, 哪些数能整除的数的个数有奇数个。而,一个数i如果能整除a, 那么它也可以整除i/a,这样一来,一个数能整除的数总是成对出现, 为了使个数是奇数,这里面一定要有一对是相等的,即a = i/a,也就是:i = a2, 所以,最后开着的锁就是编号为完全平方数的锁,即:
1, 4, 9, 16, 25, 36, 49, 64, 81, 100
一共有10把锁是打开着的。
程序员”脑筋急转弯”相关推荐
- 程序员面试问题资源经验
一.基础 原文<crack the code interview>,出资谷歌自身面试官之手,下面是中文译文. 1.1 判断一个字符串中的字符是否唯一 1.2 字符串翻转 1.3 去除字符串 ...
- 程序员面试资源大收集
资源一:<crack the code interview>--谷歌资深技术面试官经典之作 本书的中文目录如下,大部分内容由Hawstein君原创翻译,部分缺失的由快课网Jay13补充. ...
- cracking the coding interview 中文版 (程序员面试金典)
转自:CTCI面试系列--谷歌面试官经典作品 | 快课网 谷歌面试官经典作品(CTCI)目录 1.1 判断一个字符串中的字符是否唯一 1.2 字符串翻转 1.3 去除字符串中重复字符 1.8 利用已知 ...
- 程序员--看看你的反应有多快,有趣的脑筋急转弯(2)
上一篇关于程序员的脑筋急转弯得到了广大博友的广泛好评,我就再接再厉让程序员的生活更有乐趣. 本次主要是以猜字为主,看看你对汉字有多了解吧.. 八姑娘 中国电视剧名一 壮丽 杂志名一 围炉取暖.(字) ...
- 关于程序员的脑筋急转弯(附答案)
1.程序猿最常去的是哪间酒吧? 2.程序猿什么情况下会选择离职? 3.0是假,1是真,请问这是真还是假? 4.你怎样才能知道一个计算机科学家是内向还是外向的? 5.为什么大部分Java程序员都是戴眼镜 ...
- 计算机知识脑筋急转弯,关于程序员的脑筋急转弯(附答案)
1.程序猿最常去的是哪间酒吧? 2.程序猿什么情况下会选择离职? 3.0是假,1是真,请问这是真还是假? 4.你怎样才能知道一个计算机科学家是内向还是外向的? 5.为什么大部分Java程序员都是戴眼镜 ...
- OSChina 周一乱弹 —— 程序员进阶之路
2019独角兽企业重金招聘Python工程师标准>>> 周日各位是怎么过的呢?是在加班还是在睡大觉?有时间的话咱们程序员还是要好好学习,补充一下. 程序猿的读书历程:x语言入门-&g ...
- 程序员秒懂的30个段子:看到第几个你笑了?
01 问:程序猿最讨厌康熙的哪个儿子?. A.皇长子允禔 C.皇八子允禩 B.皇三子允祉 D.皇十六子允禄 答案C皇八子胤禩.因为他是八阿哥(bug) 02 程序猿要了3个孩子,分别取名叫Ctrl.A ...
- 想招到优秀的程序员?这些坑一定不要踩
一次好的面试就像两个充满激情的程序员之间的非正式谈话. 作者 | Ravi Shankar Rajan 译者 | 明明如月,责编 | 郭芮 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID ...
- 技术面试时,程序员需要什么样的编程测试?
良好的招聘流程抵万金,本文中就来和你探讨下如何设计招聘流程,以及聪明的雇主应该避免哪些做法. 作者 | Mike Hearn 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews ...
最新文章
- (三)深入浅出TCPIP之再识TCP,理解TCP四次挥手(上)
- react实现页面多个模块的切换
- 深入理解继承知识(下)
- 数的计数【Noip2001】
- matlab图像滤波详解(二维傅里叶滤波)
- malloc函数说明
- 计算机九九乘法口诀表,九九乘法口诀表
- 短线交易有这些特点的,慎做短线交易
- Sping入门(1) 了解依赖注入(DI)和应用切片(AOP)
- 会议室预订小程序,共享会议室小程序,微信小程序会议室预约系统毕设作品
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析 (iic驱动框架,i2c驱动框架)...
- 原子操作 - linux内核锁(一)
- java心跳 谁发谁_java 心跳机制
- Unity编辑器扩展: 程序化打图集工具
- NOIP 提高组 2012 / 洛谷P1080 国王游戏 题解
- 行为金融(五):非有效市场
- 实战|使用python推送微信公众号消息(哄女友专用)
- (仿)火车头采集器 源码开源
- 霸王条款+管理不善:评深圳欢乐谷2005的经营诟病
- RK3399平台开发系列讲解(ALSA子系统)4.37、ALSA驱动框架
热门文章
- python游戏寻路_游戏服务端寻路的思路与实现
- 小程序实现保存图片到手机
- 计算机怎么看事件管理,如何打开事件查看器 win7事件查看器打开及使用方法介绍...
- 2021有什么好的入耳式耳机推荐?耳机热销性价比牌子排行榜单推荐!
- MYSQL基础教程书籍
- 账户维护账户服务器,win10重装之后卡在账户登录界面怎么办_网站服务器运行维护,win10,账户...
- CameraRaw升级
- C#-Winform知识点
- day 22 内置的模块
- Mac 不小心断开移动硬盘导致磁盘无法读取和加载(顺利解决!)