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

精选程序员面试常问的逻辑题,第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

项目开发的一般流程:

1.需求分析

a) 参考以前的成功项目

b) 实地考查

c) 向专家请教

然后产生需要分析文档

2.概要设计

a) 分析文档,对整个项目模块进行划分

根据需求分析说明书进行概要设计,为将来详细设计提供文档支持

总体设计 (设计理念/软硬件环境/约束)

用例设计 (需求用例/系统框架)

接口与类设计 (分层设计/类图)

出错处理设计 (异常设计)

维护设计(系统还原与备份)

概要设计说明书

3.详细设计

a) 对概述设计中的模块进行细化,使用数据结构和算法进行描述

根据概要设计进行详细设计,为将来程序员编码提供文档支持

模块设计

模块功能清单

IPO图

模块开发优先级

界面设计

数据库设计 (表/视图/存储过程/触发器/约束)

详细设计说明书

4.编码和测试

a) 采用你所熟悉的编程语言(客户要求)进行实现

b) 测试分类:单元测试(Junit),集成测试,系统上线

编码与测试

根据详细设计说明书进行编码和测试

程序员/软件开发工程师/高级软件开发工程师

项目整合与联合测试

项目子模块之间的拼接

系统整体测试

测试计划/测试报告

5.交互和维护

一、选择题(每题1分,共20分)

1. 下列那种语言是面向对象的(C)

A. C B. PASCAL C. C++ D. FORTRAN77

2.在 Windows9x 下,可以进入 MS-D0S 方式。当在 DOS 提示符下键入 (B ) 命令后,

系统将退出 MS-DOS方式,返回到 WIndows 方式。

A. CLOSE B. EXIT C. QUIT D. RETURN

3.下面哪些是面向对象的基本特性:(A,B,C )

A 多态 B 继承 C 封装 D 接口

4.在C++中经常要进行异常处理,下面哪些是异常处理常用到的关键词:(A,B,C)

A try B catch C throw D break E contiue

5.数据库技术中的“脏数据',是指(D)的数据。

A.错误 B.回返 C.未提交 D.未提交的随后又被撤消

6.TCP/IP是一种(A,B)

A.标准 B.协议 C.语言 D.算法

7. 下面有关计算机 *** 作系统的叙述中,不正确的是( )

A *** 作系统属于系统软件

B *** 作系统只负责管理内存储器,而不管理外存储器

C UNIX 是一种 *** 作系统

D 计算机的处理器、内存等硬件资源也由 *** 作系统管理

8.微机上 *** 作系统的作用是( D)

A 解释执行源程序 B 编译源程序

C 进行编码转换 D 控制和管理系统资源

9.下列存储器中存取速度最快的是(A )

A 内存 B 硬盘 C 光盘 D 软盘

10.在计算机中,—个字节是由多少个二进制位组成的( )

A. 4 B. 8 C. 16 D. 24

11. 存储16×16点阵的一个汉字信息,需要的字节数为( )

A 32 B 64 C 128 D 256

12. 以下选项中合法的字符常量是(C)

A."B" B. '\010' C. 68 D. D

13. 假定x和y为double型,则表达式x=2,y=x+3/2的值是()

A. 3.500000 B. 3 C. 2.000000 D. 3.000000

14. 以下合法的赋值语句是()

A. x=y=100 B. d--C. x+yD. c=int(a+b)

15. 设正x、y均为整型变量,且x=10 y=3,则以下语句

pprintf("%d,%d\n",x--,--y)的输出结果是()

A.10,3 B. 9,3 C. 9,2 D.10,2

16. x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是()

A .INPUT x、y、zB. scanf("%d%d%d",&x,&y,&z)

C. scanf("%d%d%d",x,y,z)D. read("%d%d%d",&x,&y,&z)

17.以下数组定义中不正确的是()

A) int a[2][3]B) int b[][3]={0,1,2,3}

C) int c[100][100]={0}D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}}

18. 以下程序的输出结果是()

main()

{

int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}

printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]

}

A) 0650 B) 1470 C) 5430 D) 输出值不定

19 以下程序的输出结果是()

main()

{

char st[20]= "hello\0\t\\\"

printf(%d %d \n",strlen(st),sizeof(st))

}

A) 9 9 B) 5 20 C) 13 20 D) 20 20

20. 当调用Windows API函数InvalidateRect,将会产生什么消息()

A:WM_PAINT B:WM_CREATE

C:WM_NCHITTEST D:WM_SETFOCUS

二、填空题(每题3分,共30分)

1.请列举当前一些当前流行的数据库引擎__________

2. 为了将当前盘当前目录中的所有文本文件(扩展名为.TXT)的内容打印输出,正确

的单条DOS命令为______。

3. 计算机网络分为局域网和广域网,因特网属于 广域网。

4. 设y是int型变量,请写出判断y为奇效的关系表达_______。

5. 设有以下程序:

main()

{ int n1,n2

scanf("%d",&n2)

while(n2!=0)

{ n1=n2%10

n2=n2/10

printf("%d",n1)

}

}

程序运行后,如果从键盘上输入1298;则输出结果为____。

6.以下程序运行后的输出结果是______。

main()

{ char s[ ]="9876",*p

for ( p=s pbr>}

7.以下函数的功能是:求x的y次方,请填空。

double fun( double x, int y)

{ int i

double z

for(i=1, z=xibr>return z

}

8.以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调

用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。

FILE *myfling f1

myf= ______("test.t","rb")

fseek(myf,0,SEEK_END)f1=ftel(myf)

fclose(myf)

printf("%d\n",f1)

9. 以下程序输出的最后一个值是______。

int ff(int n)

{ static int f=l

f=f*n

return f

}

main()

{ int i

for(I=1I<=5I++ printf("%d\n",ff(i))

)

10. 以下程序运行后的输出结果是_____。

main()

{ int i=10, j=0

do

{ j=j+ii-

while(i>2)

printf("%d\n",j)

}

三、判断题(每题2分,共20分)

1:动态链结库不能静态调用。

2:UDP是面向无连接的网络连接

3:ASP是一种数据库引擎

4:队列是先进后出。

5:Weblogic是分布式应用服务器。

6:TCP,UDP都是传输层的协议。

7: 两个线程不能共存于同一地址空间

8: JAVA是一种跨平台的开发工具

9.在WINDOWS *** 作系统中对外设是以文件的方式进行管理

10. 虚拟内存实际是创建在硬盘上的

四、问答题(每题10分,共30分)

1. 写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出

的和以总和显示的SQL。

Select No、Name、Num1、Num2 from custom

2. 何为“事务处理”,谈谈你对它的理解。

3. 常用的数据结构有哪些?请枚举一些。(不少于5个)

4. 什么是OOP?什么是类?请对比类和对象实例之间的关系。

5. 有一组数字(3,10,6,8,98,22),请编程排序(升降序皆可),语言不限,算法不限,但须注明是何种算法。

wf11119@sina.com


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

原文地址: http://outofmemory.cn/yw/11171951.html

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

发表评论

登录后才能评论

评论列表(0条)

保存