精选程序员面试常问的逻辑题

精选程序员面试常问的逻辑题,第1张

大家在面试的时候,难免会遇到让人摸不着头脑的逻辑题,这类题目让同学们往往连答案应该回答些什么都摸不清楚,只能和面试官四目相对,非常尴尬。

其实,很多面试的考官,都是从题库随机挑选逻辑题来考验同学们,面试官有时候自己也未必完全摸透这类题目,所以面试的时候不必过于紧张,就算答不出来啊也非常正常。

在我的理解中,这类题目主要还是考大家的思路,至于答案标准与否,其实不是特别重要。

本文总结了面试中我自己面试中遇到的几道非常常见的逻辑题,大家可以作为面试前的突击复习材料。

一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?

三个人

若是两个人,设A、B是黑帽子,第二次关灯就会有人打耳光。原因是A看到B第一次没打耳光,就知道B也一定看到了有带黑帽子的人,可A除了知道B带黑帽子外,其他人都是白帽子,就可推出他自己是带黑帽子的人!同理B也是这么想的,这样第二次熄灯会有两个耳光的声音。

如果是三个人,A,B,C。A第一次没打耳光,因为他看到B,C都是带黑帽子的;而且假设自己带的是白帽子,这样只有BC戴的是黑帽子;按照只有两个人带黑帽子的推论,第二次应该有人打耳光;可第二次却没有...于是他知道B和C一定看到了除BC之外的其他人带了黑帽子,于是他知道BC看到的那个人一定是他,所以第三次有三个人打了自己一个耳光

N个人是黑帽子,就会在第N天,有N个人打自己一个耳光。

一个是两种药片,每种有两个,一个人需要早上吃两种药片各一个,现在这四个药片混在一起了这个人什么方法吃。

把所有的4颗药丸都切开成相等的两半,然后早上和晚上,分别吃掉每颗药丸的一半

一个5L,一个6L的瓶子,要得到3L的水,问什么方法

6-5=1 1L水放在5L那个瓶里面,然后再装6L水,往5L(里面已经有1L)里面倒,这样就会剩下2L水在6L里面,再把2L水放在5L里面,再装一次,不就可以6L那里到处3L水到5L里面,自己就剩下3L了

一共1000瓶酒,其中一瓶有毒。如果一只老鼠喝了有毒的酒,会在一天之后死亡,那么如果给你一天时间,然你判定哪瓶酒有毒,至少需要几只老鼠?

答案是10只。这个需要使用二进制编码来解决,1000瓶酒至少需要10位二进制数来进行编码。然后取十只杯子分别代表这是个二进制数的十个位,分别将1000瓶酒倒入其编码为1的对应的杯子中。取十个老鼠分别喝十个杯子中的酒,一天之后,就可以根据喝哪些杯子的老鼠死掉来确定出有毒的那瓶酒的编码,从而确定哪瓶酒有毒。其根据就是只有有毒酒的编码对应的毒死老鼠的杯子位置。这个题目就是利用了二进制编码的一些特性。

还有一些其他的题目也使用这些特性,比如使用特殊的位运算,一般使用比较多的位运算就是与、或和异或。

这样,就可以对应到现实生活中的一些为题,比如一个类似的问题原本我们想需要用900多台服务器来解决,经过这样分析后就可以使用10台服务器来解决,大大节约了成本。

再比如,国王有10000桶酒,已知一桶酒有毒,喝了之后一定会在23-24小时内死亡(例如0点喝,会在23-第二天0点这个时间段死亡)。现在国王要在48小时后举办一个宴会,需要用罪犯实验,请问最少几个罪犯。(可以混合酒)

如果是常规利用二进制解题的话,那就需要14个犯人,2^14=16384>10000,但是这样一来死亡时间这个条件就用不到,也不是最优解。

应该利用酒死的时间是固定的,一个罪犯像上面那样可以表示成25种状态,三个罪犯就可以表示25 x 25 x25种状态,超过10000了,所以只需要三个罪犯。

有8个小球,其中七个的重量是相同的,有一个较轻。给你一个天平,问秤几次能找出那个较轻的小球,若天平只能秤两次,又该怎么秤

第一次两边各放随机三个,如果平了,则另外一个是轻的,若不平,还有第二次,拿出那三个轻的,在两边随机放一个,就能测出哪个最轻了。

本体图解参考:

https://blog.csdn.net/hinyunsin/article/details/6632062

已知: 每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有单独的加油机),一箱油可供一架飞机绕地球飞半圈

问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)

分为3架飞机5架次和3架飞机6架次

1. 3架飞机6架次

(上图)ABC 3架同时起飞

(上图)1/8处,C给AB加满油,C返航。此时飞机的油量分别是:A: 3/4, B: 3/4, C: 3/4。此时C分别给A和B加满油,三架飞机当前油量分别是:A: 1, B: 1, C: 1/4。C返回机场。A、B继续向前飞行。

(上图)1/4处,B给A加满油,B返航,A到达1/2处,此时C已经返回机场,三家飞机此时油量分别是:A: 3/4, B: 3/4, C: 0。此时B给A加满油,C加满油,此时三架飞机的油量分别是:A: 1, B: 1/2, C: 1。然后B返回机场,A继续向前飞行。

(上图)当A飞行至半圈位置时,B已经返回机场并且加满了油(假设加油时间为0),此时,B和C沿逆时针方向飞行,三架飞机当前油量分别是:A: 1/2, B: 1, C: 1。A继续向前飞行。

(上图)当A飞行至另外半圈的1/4位置时,三架飞机剩余油量分别是:A: 1/4, B: 3/4, C: 3/4。此时,C给B加满油。此时三架飞机油量分别是:A: 1/4, B: 1, C: 1/2。C返回机场,B和A继续向前飞行。

当A飞行至另外半圈的1/2位置时,C已经返回机场,A和B相遇,此时三架飞机剩余油量分别是:A: 0, B: 3/4, C: 0。B给A加1/4的油,三架飞机剩余油量:A: 1/4, B: 1/2, C: 1。C加满油从机场逆时针飞出,B返回机场,A继续向前飞行。

(上图)当A飞行至另外半圈的3/4位置时,A和C相遇。此时三架飞机的油量分别是:A: 0, B: 1/4, C: 3/4。C给A加1/4的油,此时三架飞机的油量分别是:A: 1/4, B: 1/4, C: 1/2。C掉头返回机场,A和B继续向前飞行。

(上图)三架飞机顺利回到机场!

2. 3飞机5架次

(1)3 架飞机同时从机场出发,飞行八分之一周(A点),各耗油四分之一。此时某架飞机给其余两架补满油,自己返回基地;

(2)另一架飞机和目标机结伴,飞至四分之一周(B点),给目标机补满油,自己返回;

(3)目标机独自飞行半周(C点);

(4)与从基地反向出发的一架飞机相遇,2 机将油平分,飞至最后八分之一处(D点);

(5)与从基地反向出发的另一机相遇,各分四分之一油,返回。

75道程序员面试逻辑题和答案

https://blog.csdn.net/qq_38361726/article/details/79824632

首先面试程序员分有没有经验

面试没有经验的程序员就随便问问点ssm,ssh五大框架问题,多线程什么的,再问问是否会点前端技术

有经验就看看他的简历,问他简历项目上的问题,可以围绕着简历上的项目问,通过他的回答涉及到的技术点之类的,拓展出去问其他的

1、列出/dev目录下的文件并保存在alldev中

ls /dev >alldev

2、列出/dev目录下的文件并统计文件数,统计结果保存在lineofdev

ls -l /dev | wc -l >lineofdev

3、创建一个名为myfile的空文档

touch myfile

4、在/home/user1目录下创建一个名为www的文件,并使它与文件myfile相同

ln -s myfile /home/user1/www

5、创建文件myfile,并统计其行数和字数

wc -lw myfile

6、对/usr目录列表,并按创建时间排序,结果保存在usrlist中

ls -tl /usr >usrlist

7、使用kill命令重启ftpd服务

8、列出kill命令可以发出的信号,并保存在wsign文件中

kill -l >wsign

9、运行top命令,并将刷新5此后的结果保存在日志文件top.log中

top -b -n 5 >top.log

10、使用ps命令列出所有的非控制终端进程,并保存在ps.log文件中

ps a -NT >ps.log

11、创建user1用户账户,然后在虚拟终端以user账户登录,并执行cd /等命令后,切回GNOME,在运行的进程中查找用户名为root的用户进程

useradd user1

ps aux | grep root

12、 使用free显示内存状态,并持续观察内存的使用状况。

free

然后观察就行了

13、 显示当前日期(月份和日期),月份和日期以空格间隔

date +%m\ %d

14、 显示当前日期和时间,日期包括年月日,之后换行显示时间,时间包括时分秒

date +%Y%m%d%n%H%M%S

15、 显示日期和时间,格式:

Year:2008

Month:May

Date:

Time is:08:45:00

date +Year:%Y%nMonth:%h%nDate:%d%nTime\ is:%H:%M:%S

16、 将系统时间设置为20080515,时间设置为标准时间,并显示时区,然后显示当前时间对应的格林威治时间是什么,将结果存入time.log文件中

date -s 20080515

date -u >time.log

17、 显示日期时并设置时间为当前时间

date

date -s hh:mm:ss(填写当前时间即可)

18、 使用cal命令完成下列任务

a) 将本年度的日历存入cal2008文件中,以星期一为每周的第一天的方式

cal -my >cal2008

b) 将当前月的日历存入cal200805文件中,然后再追加当前月每一天是一年中的第几天,以默认的星期日为每周的第一天的方式

cal >cal200805

cal -j >>cal200805

c) 显示2009年1月的日历,计算出元旦是信息几

cal 1 2009

19、 使用rpm命令完成下列任务,结果全部存入rpmpack.log

a) 首先显示当前系统日期和时间,然后,查询系统中已安装的所有包由哪些,将日期和时间连同查询结果保存在package.log文件中

date >package.log

rpm -qa >>package.log

b) 在package.log中查找有否安装过fpt包、portmap包、http包、apach包等

grep -E "ftp|portmap|http|apache" package.log

c) 查询系统中已安装的apach包、ftp、http等的描述信息,并将它们保存在packdesc.log文件中

rpm -qi apache包名 >packdesc.log

rpm -qi ftp包名 >>packdesc.log

rpm -qi http包名 >>packdesc.log

...

“包名”替换成b)中查询出来的结果

d) 查询系统中所有包含“X”的软件包

rpm -qa | grep "X"

e) 查询系统中包含/etc/inittab的软件包

rpm -qf /etc/inittab

f) 查询系统中已安装包ftp的所属文件列表

rpm -qpl ftp包名

“包名”体换成b)中的查询结果

20、对/bin目录执行以下 *** 作

a) 列出/bin下的所有文件,并按文件大小排序

ls -lS /bin

b) 列出/bin下的所有文件,并按创建时间排序

ls -lt /bin

c) 列出/bin下的所有普通类型文件

ls -l | grep "^-"

d) 列出/bin下的所有普通类型文件

???同上


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/9021608.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存