一个人学习、研究、工作,其实无时无刻不是在训练或使用解决问题的能力。解决问题的能力,在我看来,有很多方面,其中很重要的一方面就是逻辑思维能力。很多人对于逻辑思维的理解是存在误区的,总以为逻辑思维只是理科生和工程师用的东西,与文科生甚至普通人没有什么关系。而实际上, 逻辑思维所涉及的范围远远不止以数学为基础的理工科,而是一种涵盖各种学科、各种工作的通识能力 。
比如说,大学学文科专业的罗振宇,几年前开了一个节目叫“罗辑思维”,强调用逻辑思维来理解世界,节目的内容涉及社会、历史、经济、人文、理工等各方面,俘获了几百万乃至上千万的粉丝。后来罗打造得到APP成为最知名的知识付费应用,就是以罗辑思维这个品牌栏目为底子做的。
最近看了一些大的科技公司(比如谷歌、微软等)等招聘员工的面试题,很有意思,在这里与大家分享,并共同探讨。
这是微软非常知名的一道面试题,曾经难倒无数学霸才子:不是说好的考程序题或者智力题吗,怎么来了一个社会基础建设问题?
为什么是圆的?方的不行吗?圆的究竟优势在哪里?
这就是在考察面试者的逻辑思维了。其实认真思考之后,不难得出“标准答案”:
如果面试者能够这样回答,说明他的逻辑思维不错,或者至少生活经验比较丰富。
那么这是唯一的正确答案吗?没有这么简单。我从一些优秀者的回答中,还发现了其它也很有道理的答案:
如果面试者能够在所谓“标准答案”的基础上,多给出几个原因,那么说明不仅逻辑思维很好,工程思维也非常棒,善于运用生活中的知识。这道题基本上给考官的印象应该是满分了。
但是,关于这道题的讨论并非到此为止。 下水道井盖一定是圆的吗?有没有可能是方的或者其它形状的?
传说有一位面试者,在被问到该问题的时候,坚持说也可以用方的井盖,并给出了合理的理由,最终成功说服了考官。下面是传说的面试过程:
这位面试者不仅逻辑思维和工程经验丰富,说服人的能力也非常强,让考官觉得他是不可多得的人才,被推荐到更需要综合技能的销售部门工作。
其实,像这样的逻辑思维面试题并没有所谓的标准答案,考官的真实目的是 考察面试者的逻辑思维能力 ,更一般的讲,是 解决问题的能力 。下水道盖也可以是方的,只要你能给出合理的理由,自圆其说。
这是Google的一道面试题:
有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层?
最笨的办法谁都能想到:
可是这个办法,最坏的情况下要试99次,平均意义上要试49次。而且只用了一个球,另一个球没利用上。显然不是最优的策略。
计算机专业的学生很容易想到更高级的办法——二分法。具体是:
用这种方法,需要log100,也就是大约7次,能够找到答案。
面试者如果能这样回答,说明对计算机专业基本算法是有了解的。但是,仔细想想,这个方法对吗?
这个方法显然是有毛病的。比如说我举一个反例,第10层是临界层的情况。按照二分法来执行,第一次试验第50层将摔碎,第二次试验第25层又将摔碎,此时两个玻璃球都摔碎了,将没有办法继续进行试验!
注意最多有两个球,也就是最多可以摔碎两次。尽管上述二分法不可行,我们是否可以借鉴其思路,先大致确定一个小的范围,然后逐个试验呢?根据这样的思路,可以提出下面的方法:
这种方法最坏的情况出现在临界层为100时,将需要试验10+10=20次;最好的情况出现在临界层为2时,只需要试验2次。而平均意义上大约需要试验10次。怎么样,是不是有效的利用了两个球呢?
按照吴军老师的说法,这种解题方法其实体现了 一种典型的工程思维:粗调和精调 。其中第一个球用于粗调,确定一个大致的范围;第二个球用于精调,在大致的范围内确定精确的值。
其实,粗调和精调的工程思维在生活和工程中都很常见:
从这几个例子,我们可以对粗调和精调的优点及注意事项进行简单的总结:
了解了粗调和精调的概念之后,我们回过头来,再次考察这道玻璃球题目。如果有3个玻璃球呢,是否有更好的方法?
当然是有的,标准的答案是采取三步试验:
细心的读者会发现,这三步试验分别把答案的可能范围缩小了4、4、5倍,最终确定了答案。
为什么是这几个数呢?而且,回过头来想想,为什么两个小球的情况下,两步试验缩小的范围分别是10、10呢?
这几个数的选择,当然绝非巧合。实际上,2个和3个玻璃球的情况下,缩小倍数分别是按照根号下100(也就是10)、3次根号下100(大约是5)来选择的。 推广到n个玻璃球的情况下,每步试验的范围缩小倍数应该是n次根号下100。 具体证明,我们在这里不做讨论。
这绝不仅仅是一个小小的逻辑题, 考官想考察的是面试者的逻辑思维,包括工程思想、分析能力以及举一反三的归纳概括能力 。知道标准答案不算什么,吃透这道题并弄清背后的深刻原理,才是本事。
这道题相对前两道来说要简单一些。据说Google过去面试产品经理的时候会问到这个问题。什么数据都不给,直接就这么问。
有些中国面试者可能不乐意了:你又不告诉我高尔夫球多大,也不告诉我这个房间的尺寸,什么数据都没有,我怎么算啊?
但是这个题没错,考官考察的就是不给数据你怎么计算!要不然小学生都能算出来了。
有些人一看没给数据,可能就会胡猜:一间普通办公室,又不是很大,高尔夫球直径大概几厘米,直观感觉应该能装几千个或者几万个吧?
然而答案恰恰违反我们的直觉:至少能装几十万个,甚至能装上百万个。
我们来算算:
一个房间竟然能装这么多高尔夫球?是不是大的出乎我们的意料呢?
有人可能会怀疑,这道题如此简单,小学生都能做,侮辱人智商吗?然而这道题实际考察的,是我们解决问题的方式。Google对产品经理的要求是:
有的面试者在没给数据的情况下可能会根据直觉乱猜,这是做事的大忌,因为很多东西其实是反直觉的,乱猜可能导致完全错误的结论,这是很危险的。最准确的做法是拿工具量一下会议室的长宽高以及高尔夫球的直径,然后进行计算。不过,在没有准确数据的情况下,合理的估算也是可行的,甚至也是必要的,估算能够帮助我们大致知道答案的范围,这在很多情况下已经足够支持决策!
\/php中的逻辑思维的\/培养可以从下\/面的几个\/方向\/进行学习,思维快的能快速\/编写逻辑代码。
第一:明确学习目的
逻辑思维学习编程对多数IT业人员来说都是非常有用的。学编程,做一名编程人员,从个人角度讲,可以\/解决在软件\/使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重\/要得砝码,有利于在求\/职道路上谋得一个好的职位;从国家的角度,可以为中国的软件产业做出应\\//有的贡献,一名优秀\/的程序员永远是被争夺的对象。学习编程还能\/锻炼思维,使我们的逻\/辑思维更加严密;能够不断享受\/到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本\/身是一种\/创造性的工\/作。知识经济时代给我们带来了无限的机会,要\/想真正掌握计算\/机技术,并在IT行业里干出\/一番事业来,有所作为,具有一定的编程能力是一个基本条件和要求。
第二打好基础,学好基础知识对我们开发也很重要学编程要具备一定的基础,总结之有以下几方面:
\/首先是数学基础 从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机\/也是为数值计算而设计的。因此,要学好计算机就要有一定的数学基础,出学者有高中水平就差不多了。
其次是逻辑思维能\/力的培养 学程序设计要有一定的逻辑思维能力,“逻思力”的培养要长时间的实践锻炼。要\/想成为一名优秀的程序员,最重要的是掌握编程思想。要做到这一点必须在反\/复的实践、观察、分析、比较、总结中逐\/渐地积累。因此在学习编程过程中,我们不必等到什么都完全明白了才去\/动手实践,只要明白了大概,就要敢于自己动手去体验。谁都有第一次。有些问题只有通过实践后才能明白,也\/只\/有实践才能把老师和书上的知识变成自己的,高手都是这样\/成材的。最后是选择一种合适的入门语言 面对各种各样的语言,应按什么样的顺序学呢?程序设计工\/具不外乎如下几类: 1)本地开发 应用软件开发的工具有:Visual Basic 、Delphi 、VC++ ( C++ Builder ) 等;数据库开\/发工具有:Visual Foxpro 、Oracle Developer 、Power Builder 等。 2)跨平台开发 开发工具如 Java 等。 3)网络开发 对客户端开发工具如:Java Script 等;对服务器开发工具如:PHP 、ASP 、JSP 、ISAPI 、NSAPI 、CGI 等。 以上不同的环境下几种开发工具中 VB 法简单并容易理解,界面设计是可设化的,易学、易用。选 VB 作为入门的方向对出学者是较为适合的。
第三:注意理解一些重要概念
一本程序设计的\/书看到的无非就是变量、函数、条件语句、循环语句等概念,但要真正能进行编程应用,需要深入理解这些概念,在理解的基础上应用,不要只简单地学习语法、结构,而要吃透针对这些语法、结构的应用例子,做到举一反三,触类旁通。
第四:掌握编程思想,编程思\/想使用较多的就是oop编程思想
学习一门语言或开发工\/具,语法结\/构、功能调用是次要的,最主要是学习它的思想。例如学习 VC 就要学习 Windows 的内在机理、\/什么是线程.\/.....;学习 COM 就要知道VTALBE 、类厂、接口、idl......,关键是学一种思想,有了思想,那么我们就可以触类旁通。
第六:多实践、多交流,一切思维来自项目开发的积累
掌握编程思想必须在编程实际工作中\/去实践和体会。编程起步阶段要经常自己动手设计程序,具体设计\/时不要拘泥于固定的思维方式,遇到问题要多想几种解决的方案。这就要多交流,各人的\/思维方式不同、\/角度各异,\/各有高招,通过交流可不断吸收别人的长处,丰富编程实践,帮助自己提高水平。亲自动手进行程序设计是创造性思维应用的\/体现,也是培养逻辑思维的好方法。
第七:养成良好的\/编程习惯
编程入门不难,但\/入门后不断学习是十分重要的,相对来说较为漫长。在此期间要注意养成一些良好的编程习\/惯。编程风格的好坏很\/大程度\/影响程序质量。良好的编程风格可以使
程序结构清晰合理,且使程序代码\/便于维护。如代码的缩进编排、变量命令规则的一致性、代码的注释等。
第八:\/上网学编程
在网上可以学到很多不同的编程思想、方法、经验和技巧,有大量的工具和作品及相关的辅导材料供下载
8.加强计算机理论知识的再学习
思维培养学编程\/是符合“理论→实践→\/再理论→再实践”的一个认识过程。一开始要具有一定的计算机理论基\/础知识,包\/括编程所需的\/数学基础知识,具备了入门的条件,就可以
开始编程的实践,从\/实践中可以发现问题\/需要加强计算机理论知识的再学习。程序人人皆可编,但当你发现编\/到一定程度很\/难再提高的\/时候,就\/要回头来学习一些计算机科学和数
学基础理论。\/学过之后,很多\/以\/前遇到的问题都会迎刃而解,使人有豁然开朗之感。因此在学习编程\/的过程中要不断地针对应\/用中的困惑和问题深\/学习数据结构、算法、计算机
原理、编译\/原理、 *** 作系统\/原理、软件工程等计算机科学的理论基础和数理逻辑、代数系统、图论、离散数学等数学理论基础知识。这样经过不断的学习,再努力地实践,编程水平一定会不断提高到一个新高度。
逻辑思维题训练(附答案)
【1】假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。
1、先把5升的灌满,倒在6升里,这时6升的壶里有5升水
2.再把5升的灌满,用5升的壶把6升的灌满,这时5升的壶里剩4升水
3.把6升的水倒掉,再把5升壶里剩余的水倒入6升的壶里,这时6升的壶里有4升水
4.把5升壶灌满,倒入6升的壶,5-2=3
【2】周雯的妈妈是豫林水泥厂的化验员。 一天,周雯来到化验室做作业。做完后想出去玩。 "等等,妈妈还要考你一个题目,"她接着说,"你看这6只做化验用的玻璃杯,前面3只盛满了水,后面3只是空的。你 能只移动1只玻璃杯,就便盛满水的杯子和空杯子间隔起来 吗?" 爱动脑筋的周雯,是学校里有名的"小机灵",她只想了一会儿就做到了。 请你想想看,"小机灵"是怎样做的?
把第二个满着的杯子里的水倒到第五个空着的杯子里
【3】三个小伙子同时爱上了一 个姑娘,为了决定他们谁能娶这个姑娘,他们决定用手q进行一次决斗。小李的命中率是30%,小黄比他好些,命中率是50%,最出色的q手是小林,他从不失 误,命中率是100%。由于这个显而易见的事实,为公平起见,他们决定按这样的顺序:小李先开q,小黄第二,小林最后。然后这样循环,直到他们只剩下一个人。那么这三个人中谁活下来的机会最大呢?他们都应该采取什么样的策略?
小黄。因为小李是第一个出手的,他要解决的第一个人就会是
小林,这样就会保证自己的安全,因为如果小黄被解决,自己理所当然地会成为小林的目标,他也必定会被打死。而小黄如果第一q不打小林而去打小李,自己肯定会死(他命中较高,会成为接下来的神q手小林的目标)。他必定去尝试先打死小林。那么30% 50%的几率是80%(第一回合小林的死亡率,但会有一点点偏差,毕竟相加了)。那么第一回合小黄的死亡率是20%多一点点(小林的命中减去自己的死亡率)。假设小林第一回合死了,就轮到小李打小黄了,那么小李的命中就变成了50%多一点点(自己的命中加上小黄的死亡率)。这样就变成了小李小黄对决,
第二回合的小李的第一q命中是50%,小黄也是。可是如果拖下去的话占上风的自然就是小黄了,可能赢得也自然是小黄了。至于策略我看大家都领悟了吧。
【4】一间囚房里关押着两个犯人。每天监狱都会为这间囚房提供一罐汤,让这两个犯人自己来分。起初,这两个人经常会发生争执,因为他们总是有人认为对方的汤比自己的多。后来他们找到了一个两全其美的办法:一个人分汤,让另一个人先选。于是争端就这么解决了。可 是,现在这间囚房里又加进来一个新犯人,现在是三个人来分汤。必须寻找一个新的方法来维持他们之间的和平。该怎么办呢
按:心理问题,不是逻辑问题
甲分三碗汤,乙选认为最多和最少的倒回灌里再平分到剩余的两个碗里,让丁先选,其次是甲,最后是乙
【5】在一张长方形的桌面上放了n个一样大小的圆形硬币。这些硬币中可能有一些不完全在桌面内,也可能有一些彼此重叠;当再多放一个硬币而它的圆心在桌面内时,新放的硬币便必定与原先某些硬币重叠。请证明整个桌面可以用4n个硬币完全覆盖
假如先前N个中没有重叠且边上的都超出桌子的边上且全都是紧靠着的.那么根据题意就可以有:
空隙个数Y=3N/2 3(自己推算) 每一个空都要一个圆来盖
桌面就一共有圆的数为:
Y N=3N/2 3 =5N/2 3 <=4N(除N=1外) 所以可以用4N个硬币完全覆盖.
【6】一个球、一把长度大约是球的直径2/3长度的直尺.你怎样测出球的半径?方法很多看看谁的比较巧妙
用绳子围球一周后测绳长来计算半径(用纸筒套住球来测更准)
借助排水法测体积后计算半径
【7】五个大小相同的一元人民币硬币。要求两两相接触,应该怎么摆?
要两人才能做到, 先在平面上摆放一枚,再在这枚硬币的正面立着放两枚(这两枚是侧面接触的),这样,这三枚硬币之间形成一个三角形空隙。剩下的两枚在空隙处交叉就行了,注意这两枚同样是平躺着,但可能需要翘起一定的角度。
【8】猜牌问题
S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4 黑桃J、8、4、2、7、3 草花K、Q、5、4、6 方块A、5。约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉 P先生,把这张牌的花色告诉Q先生。这时,约翰教授问P先生和Q 先生:你们能从已知的点数或花色中推知这张牌是什么牌吗? 于是,S先生听到如下的对话:P先生:我不知道这张牌。
Q先生:我知道你不知道这张牌。
P先生:现在我知道这张牌了。
Q先生:我也知道了。
听罢以上的对话,S先生想了一想之后,就正确地推出这张牌是什么牌。
请问:这张牌是什么牌? 方块5
【9】一个教授逻辑学的教授,有三个学生,而且三个学生均非常聪明!
一天教授给他们出了一个题,教授在每个人脑门上贴了一张纸条并告诉他们,每个人的纸条上都写了一个正整数,且某两个数的和等于第三个!(每个人可以看见另两个数,但看不见自己的)
教授问第一个学生:你能猜出自己的数吗?回答:不能,问第二个,不能,第三个,不能,再问第一个,不能,第二个,不能,第三个:我猜出来了,是144!教授很满意的笑了。请问您能猜出另外两个人的数吗?
经过第一轮,说明任何两个数都是不同的。第二轮,前两个人没有猜出,说明任何一个数都不是其它数的两倍。现在有了以下几个条件:1.每个数大于02.两两不等3.任意一个数不是其他数的两倍。每个数字可能是另两个之和或之差,第三个人能猜出144,必然根据前面三个条件排除了其中的一种可能。假设:是两个数之差,即x-y=144。这时1(x,y>0)和2(x!=y)都满足,所以要否定x+y必然要使3不满足,即x+y=2y,解得x=y,不成立(不然第一轮就可猜出),所以不是两数之差。因此是两数之和,即x+y=144。同理,这时1,2都满足,必然要使3不满足,即x-y=2y,两方程联立,可得x=108,y=36。
这两轮猜的顺序其实分别为这样:第一轮(一号,二号),第二轮(三号,一号,二号)。这样分大家在每轮结束时获得的信息是相同的(即前面的三个条件)。
那么就假设我们是C,来看看C是怎么做出来的:C看到的是A的36和B的108,因为条件,两个数的和是第三个,那么自己要么是72要么是144(猜到这个是因为72的话,108就是36和72的和,144的话就是108和36的和。这样子这句话看不懂的举手):
假设自己(C)是72的话,那么B在第二回合的时候就可以看出来,下面是如果C是72,B的思路:这种情况下,B看到的就是A的36和C的72,那么他就可以猜自己,是36或者是108(猜到这个是因为36的话,36加36等于72,108的话就是36和108的和):
如果假设自己(B)头上是36,那么,C在第一回合的时候就可以看出来,下面是如果B是36,C的思路:这种情况下,C看到的就是A的36和B的36,那么他就可以猜自己,是72或者是0(这个不再解释了):
如果假设自己(C)头上是0,那么,A在第一回合的时候就可以看出来,下面是如果C是0,A的思路:这种情况下,A看到的就是B的36和C的0,那么他就可以猜自己,是36或者是36(这个不再解释了),那他可以一口报出自己头上的36。(然后是逆推逆推逆推),现在A在第一回合没报出自己的36,C(在B的想象中)就可以知道自己头上不是0,如果其他和B的想法一样(指B头上是36),那么C在第一回合就可以报出自己的72。现在C在第一回合没报出自己的36,B(在C的想象中)就可以知道自己头上不是36,如果其他和C的想法一样(指C头上是72),那么B在第二回合就可以报出自己的108。现在B在第二回合没报出自己的108,C就可以知道自己头上不是72,那么C头上的唯一可能就是144了。
【10】某城市发生了一起汽车撞人逃跑事件 该城市只有两种颜色的车,蓝色15% 绿色85%
事发时有一个人在现场看见了 他指证是蓝车 但是根据专家在现场分析,当时那种条件能看正确的可能性是80% 那么,肇事的车是蓝车的概率到底是多少?
15%*80%/(85%×20%+15%*80%)
【11】有一人有240公斤 水,他想运往干旱地区赚钱。他每次最多携带60公斤,并且每前进一公里须耗水1公斤(均匀耗水)。假设水的价格在出发地为0,以后,与运输路程成正比, (即在10公里处为10元/公斤,在20公里处为20元/公斤......),又假设他必须安全返回,请问,他最多可赚多少钱?
f(x)=(60-2x)*x,当x=15时,有最大值450。
1820元设是X公里处赚最多钱。问题就成是求一个一元二次方程的最大值,求得是在15公里处赚钱最多,450元。一共240公斤……
【12】现在共有100匹马跟100块石头,马分3种,大型马;中型马跟小型马。其中一匹大马一次可以驮3块石头,中型马可以驮2块,而小型马2头可以驮一块石头。问需要多少匹大马,中型马跟小型马?(问题的关键是刚好必须是用完100匹马)
6种结果
大、中、小:(2\30\68)(5\25\70)(8\20\72)(11\15\74)(14\10\76)(17\5\78)
【13】1=5 2=15 3=2154=2145 那么5=? 因为1=5,所以5=1
【14】有2n个人排队进电影院,票价是50美分。在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子)。愚蠢的电影院开始卖票时1分钱也没有。
问: 有多少种排队方法 使得 每当一个拥有1美元买票时,电影院都有50美分找钱
注: 1美元=100美分 拥有1美元的人,拥有的是纸币,没法破成2个50美分
本题可用递归算法,但时间复杂度为2的n次方,也可以用动态规划法,时间复杂度为n的平方,实现起来相对要简单得多,但最方便的就是直接运用公式:排队的种数=(2n)!/[n!(n 1)!]。
如果不考虑电影院能否找钱,那么一共有(2n)!/[n!n!]种排队方法(即从2n个人中取出n个人的组合数),对于每一种排队方法,如果他会导致电影院无法找钱,则称为不合格的,这种的排队方法有(2n)!/[(n-1)!(n 1)!](从2n个人中取出n-1个人的组合数)种,所以合格的排队种数就是(2n)!/[n!n!]- (2n)!/[(n-1)!(n 1)!] =(2n)!/[n!(n 1)!]。至于为什么不合格数是(2n)!/[(n-1)!(n1)!],说起来太复杂,这里就不讲了。
【15】一个人花8块钱买了一只鸡,9块钱卖掉了,然后他觉得不划算,花10块钱又买回来了,11块卖给另外一个人。问他赚了多少? 2元
【16】有一种体育竞赛共含M个项目,有运动员A,B,C参加,在每一项目中,第一,第二,第三名分别的X,Y,Z分,其中X,Y,Z为正整数且X>Y>Z。最后A得22分,B与C均得9分,B在百米赛中取得第一。求M的值,并问在跳高中谁得第二名。
M=5 C得第二名
因为ABC三人得分共40分,三名得分都为正整数且不等,所以前三名得分最少为6分,40=5*8=4*10=2*20=1*20,不难得出项目数只能是5.即M=5.
A得分为22分,共5项,所以每项第一名得分只能是5,故A应得4个第一名一个第二名.22=5*4 2,第二名得2分,又B百米得第一,9=5 1 1 1 1 所以跳高中只有C得第二名
B的5项共9分,其中百米第一5分,其它4项全是1分,9=5 1=1 1 1.即B除百米第一外全是第三,跳高第二必定是C所得
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)