程序员学学智力题

版权声明:本文为博主原创文章,未经博主允许不得转载。技术交流可邮:[email protected] https://blog.csdn.net/cjh94520/article/details/70770020

程序员学学智力题

关于智力题的心得:一般来说:
- 题目语句中出现提示“无法确定”的情况,证明该组合有2个以上的可能性,这是一个关键切入点
- 有些题目采用“负负得正”的解放,这是一个隐藏的条件
- 推理的题目用小数字慢慢推敲,找规律

==一、常规推理题==

1.考虑一个双人游戏。游戏在一个圆桌上进行。每个游戏者都有足够多的硬币。他们需要在桌子上轮流放置硬币,每次必需且只能放置一枚硬币,要求硬币完全置于桌面内(不能有一部分悬在桌子外面),并且不能与原来放过的硬币重叠。谁没有地方放置新的硬币,谁就输了。游戏的先行者还是后行者有必胜策略?这种策略是什么?

答案:先行者在桌子中心放置一枚硬币,以后的硬币总是放在与后行者刚才放的地方相对称的位置。这样,只要后行者能放,先行者一定也有地方放。先行者必胜。

2.一个矩形蛋糕,蛋糕内部有一块矩形的空洞。只用一刀,如何将蛋糕切成大小相等的两块?

答案:注意到平分矩形面积的线都经过矩形的中心。过大矩形和空心矩形各自的中心画一条线,这条线显然把两个矩形都分成了一半,它们的差当然也是相等的。

3.你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段 ,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你 的工人付费?

答案:1.2.4

4.烧一根不均匀的绳要用一个小时,如何用它来判断半个小时?烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?

答案: 1. 两头一齐烧;2.1根一头烧,另一根两头烧,两头烧完是半小时,然后点燃一头烧的另一头,得到45分钟的燃烧事件,然后还差30分钟,你懂的。

5.在一个孤岛上,住着两种居民:人和吸血鬼.有一年,这里发生了一场大瘟疫,有一半的人和吸血鬼精神错乱.这样一来,这里的居民就分成了4种人:神志清醒的人、精神错乱的人、神志清醒的吸血鬼、神经错乱的吸血鬼,从外表上是无法将他们区分开的.他们的不同在于:凡是神志清醒的人总是说真话的,但是一旦精神错乱了,他也就只会说假话了.吸血鬼同人恰好相反,凡是神志清醒的吸血鬼都是说假话的,但是他们一旦精神错乱,倒反说起真话了.这四类人讲话都很干脆,他们对任何问题的回答,只用两个词:“是”或“不是”.有一天,有为博士来到了这个岛上.他遇见了一个村民Z.博士很想知道他是属于四类居民的那一类.于是,他就向Z提出了一个问题.他根据Z的回答,立即就推定Z是人还是吸血鬼.后来,他又提出了一个问题,又推断出Z是神志清醒的还是神经错乱的.

答案:他应该先问:你的神志是否清醒?
若回答:是,那就一定是人;若回答:不是,那就一定是吸血鬼.
然后再问:你是不是人?
这时已经知道他是人还是吸血鬼,如果他是人,然后回答“是”,那他一定是神志清醒的人,如果回答“不是”,那他就肯定是精神错乱的人.如果他是吸血鬼,然后回答“是”,那他一定是神志清醒的鬼,如果回答“不是”,那他就肯定是精神错乱的鬼

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

答:有三个人戴黑帽。假设有N个人戴黑,当N=1时,戴黑人看见别人都为白则能肯
定自己为黑。于是第一次关灯就应该有声。可以断定N>1。对于每个戴黑的人来说,他能看见N-1顶黑帽,并由此假定自己为白。但等待N-1次还没有人打自己以后,每个戴黑人都能知道自己也是黑的了。所以第N次关灯就有N个人打自己。

7. 话说一天有5个海盗抢了一艘who的游轮,抢到了100枚金币,但这5个人没有老大,不知道怎么分这100枚金币。不过5个人都绝顶聪明,他们决定:1,抽签,决定12345五个号码,2,由1号提分配方案,大家一起举手表决,超过半数同意则通过;否则被扔进大海里喂鲨鱼;3,1号死了由2号提分配方案,四个人表决有超过半数人同意,则通过,否则仍旧被扔进大海里喂鲨鱼;4,以此类推—–假定:每个海盗都是一样的聪明,没有谁比谁笨,都很理智可以做出理性的决策,那么1号如何决策才能使自己的收益最大且当然不会被扔进大海里喂鲨鱼?

答案分析: 1号海盗分给3号1枚金币,4号或5号2枚金币,自己则独得97枚金币,即分配方案为(97,0,1,2,0)或(97,0,1,0,2)。
- 首先从5号海盗开始,因为他是最安全的,没有被扔下大海的风险,因此他的策略也最为简单,即最好前面的人全都死光光,那么他就可以独得这100枚金币了。
- 接下来看4号,他的生存机会完全取决于前面还有人存活着,因为如果1号到3号的海盗全都喂了鲨鱼,那么在只剩4号与5号的情况下,不管4号提出怎样的分配方案,5号一定都会投反对票来让4号去喂鲨鱼,以独吞全部的金币。哪怕4号为了保命而讨好5号,提出(0,100)这样的方案让5号独占金币,但是5号还有可能觉得留着4号有危险,而投票反对以让其喂鲨鱼。因此理性的4号是不应该冒这样的风险,把存活的希望寄托在5号的随机选择上的,他惟有支持3号才能绝对保证自身的性命。
- 再来看3号,他经过上述的逻辑推理之后,就会提出(100,0,0)这样的分配方案,因为他知道4号哪怕一无所获,也还是会无条件的支持他而投赞成票的,那么再加上自己的1票就可以使他稳获这100金币了。
- 但是,2号也经过推理得知了3号的分配方案,那么他就会提出(98,0,1,1)的方案。因为这个方案相对于3号的分配方案,4号和5号至少可以获得1枚金币,理性的4号和5号自然会觉得此方案对他们来说更有利而支持2号,不希望2号出局而由3号来进行分配。这样,2号就可以屁颠屁颠的拿走98枚金币了。
- 不幸的是,1号海盗更不是省油的灯,经过一番推理之后也洞悉了2号的分配方案。他将采取的策略是放弃2号,而给3号1枚金币,同时给4号或5号2枚金币,即提出(97,0,1,2,0)或(97,0,1,0,2)的分配方案。由于1号的分配方案对于3号与4号或5号来说,相比2号的方案可以获得更多的利益,那么他们将会投票支持1号,再加上1号自身的1票,97枚金币就可轻松落入1号的腰包了。

==二、数学推理 题==

1. 有100盏灯,从1~100编上号,开始时所有的灯都是关着的。第一次,把所有编号是1的倍数的灯的开关状态改变一次;第二次,把所有编号是2的倍数的灯的开关状态改变一次;第三次,把所有编号是3的倍数的灯的开关状态改变一次; 依此类推,直到把所有编号是100的倍数的灯的开关状态改变一次。 问,此时所有开着的灯的编号。

答案:由于最开始时灯是灭的,那么只有经过奇数次改变开关状态的灯是亮的。根据题意可知一个数字有多少约数就要按下开关多少次,所以最后亮着的灯的数学解释就是:灯的编号有奇数个不同的约数。
一个数的约数按出现的奇偶个数分为以下两种:
- 约数是成对出现的,比如8的约数对为:(1,8)、(2,4)
- 约数是单个出现的,比如36的约数对为:(1,36)、(2,18)、(3,12)、(4,9)、(6)可以看出6自己单独是36的约数,而不是和别的数连在一起的。
- 所以只有平方数才会有奇数个整型约数,才满足本题的要求。从1到100的平方数为:1、4、9、16、25、36、49、64、81、100,所以只有这些灯是亮的。

2.如何快速找出一个32位整数的二进制表达里有多少个”1”?

答案:(关于数字位数线性):for(n=0; b; b >>= 1) if (b & 1) n++;

3.一个大小为N的数组,所有数都是不超过N-1的正整数。用O(N)的时间找出重复的那个数(假设只有一个)。

答案:计算数组中的所有数的和,再计算出从1到N-1的所有数的和,两者之差即为重复的那个数。

4.给出一行C语言表达式,判断给定的整数是否是一个2的幂。

答案:(b & (b-1)) == 0

5.小猴最多能运回多少根香蕉(==边走边吃的经典题目==)

答案:小猴每次走出一段再返回后都要多吃几根香蕉,所以要想多搬回香蕉,办法就是尽量少返回,而返回的原因是一次最多能够搬50根,当香蕉多余50根的时候一次不能搬尽,要返回再搬,所以第一次走出n米,返回剩余的50根到距家50-n米处,剩余100-3n根,根据上面的分析,100-3n要小于50,由于每次返回都要多消耗2n根,所以n要尽量小,即剩余的根数要尽量大且小于50。
- 则 100-3n<=50
- 得 n<=17
- 所以第一次应走出17米后再返回,剩余100-17*3=49根,此时距家33米,所以到家最多能够剩余16根香蕉

6. 1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?

答案:买20瓶,20得10瓶,10瓶得5瓶,5瓶其中一个空瓶先不管,4瓶得2瓶,2瓶得1瓶,1瓶+之前不管的1瓶得1瓶,结束。20+10+5+2+1+1=39

7. 一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?

答案:答案应该是2,2,9
(过程)举三个数相加得13的情况如下:
1 1 11(11) 1 2 10(20) 1 3 9(27) 1 4 8(32) 1 5 7(35)
1 6 6(36) 2 2 9(36) 2 3 8(48) 2 4 7(56) 2 5 6(60)
3 3 7(63) 3 4 6(72) 3 5 5(75)
4 4 5(80)
其中括号中的数字为三数之积,这里只有两种情况的数字相等,故父亲必然36。
否则那个下属必然可以判断出三个女孩的年龄,再根据只有一个女儿的头发是黑的,
因此排除了1,6,6的情况,即得答案 .

==三、负负得正 问题==

1.走到一条岔路上,前面遇到两个人,一个人永远说真话,一个人永远说假话,你并不知道谁说真话谁说假话,只许问其中一个人一句话,就知道该往那里走了。

答案:这是最基本的负负得正的题目,如果只把焦点聚在“一个人永远说真话,一个人永远说假话”是解不了题目的,缺少更多的条件,但是这种题目一般隐藏了另一个条件,就是这个人知道另外一个的情况。所以可以通过负负得正的解法,问其中一个人,另外一个人会要求我选择哪条路,然后采用相反的答案即可。
假设你问的是说真话的人,问的人会指出说谎人指出的错误的路。
假设你问的是说谎话的人,会被回答说出真话人说的相

2.用线性时间和常数附加空间将一篇文章的单词(不是字符)倒序。

答案:先将整篇文章的所有字符逆序(从两头起不断交换位置相对称的字符);然后用同样的办法将每个单词内部的字符逆序。这样,整篇文章的单词顺序颠倒了,但单词本身又被转回来了。

3. 用线性时间和常数附加空间将一个长度为n的字符串向左循环移动m位(例如,”abcdefg”移动3位就变成了”defgabc”)。

答案:把字符串切成长为m和n-m的两半。将这两个部分分别逆序,再对整个字符串逆序。

4.在太平洋的一个小岛上生活着土人,他们不愿意被外人打扰,一天,一个探险家到了岛上,被土人抓住,土人的祭司告诉他,你临死前还可以有一个机会留下一句话,如果这句话是真的,你将被烧死,是假的,你将被五马分尸,可怜的探险家如何才能活下来?

答案:我会被五马分尸。

tip : 上面中第2题和第3题都是采用了“负负得正”的思想,第3题参考了第2题的思想,把两个字符串当成两个单词,由于负负得正,你先对整个字符串逆序再将两个部分分别逆序效果是一样的。

==四、反推+转换角度 问题==

有些问题,直接解有难度,逻辑混乱,但是用反推和转换角度的办法一下子就可以得到正确的答案。

1.有一辆火车以每小时15公里的速度离开洛杉矶直奔纽约,另一辆火车以每小时20公里的速度从纽约开往洛杉矶。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从洛杉矶出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟飞行了多长距离?

答案:直接计算小鸟来回飞的距离很困难,但是我们不直接从小鸟具体来回飞来计算具体距离,从路程=速度时间的角度来想,小鸟一直做匀速运动,而运动的时间就是火车相遇的时间,时间=s/30,所以飞的距离= s/30 30 = s ,是洛杉矶和纽约的距离。

四、==称重问题==

1.假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?

答案:要点是不要总想着8个球全部放上去,放上去部分球,剩下一些球,也是一种解法。

2.你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪个罐子的药被污染了?

答案:1号罐取1丸,2号罐取2丸,3号罐取3丸,4号罐取4丸,称量该10个药丸,比正常重量重几就是几号罐的药有问题。

==五、过桥问题==

1.小明一家过一座桥,过桥时是黑夜,所以必须有灯。现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后30秒就会熄灭。问:小明一家如何过桥?(==经典的过桥问题-时间类目==)

参考答案:
1、小明和小明弟弟过桥,需要花费3秒(小明弟弟慢,花3秒),计T1 = 3秒,总用时TC=3秒;
2、小明回来,需要花费1秒,记T2=1秒,总用时TC=4秒;
3、小明爷爷和小明妈妈一起过桥,需要花费12秒,记T3=12,总用时TC=16秒;
4、小明弟弟回来,需要花费3秒,记T4=3秒,总用时TC=19秒;
5、小明和小明爸爸一起过桥,需要花费6秒,记T5=6秒,总用时TC=25秒;
6、小明回来,需要花费1秒,记T6=1秒,总用时TC=26秒;
7、小明和小明弟弟一起过桥,需要花费3秒,记T7=3秒,总用时TC=29秒;
这样,在第3步,小明爷爷和妈妈过桥后留下,第5步,小明爸爸过桥后留下,第7步,小明和小明弟弟过桥后,一家人成功在30秒内过桥。

==tip==:
- 过桥速度受最慢的人的影响,而且还要走回来(传灯),所以让速度快的一组先过去
- 然后慢的一组过去,速度最快的和第二快的轮流送人过去

- 最后速度最快的人过去

==六、未归类==

1.一片树叶,第一天大小是1,第二天变成2,第三天4,现在要铺满一个湖,需要40天,请问铺到一半需要多少时间?

答案:39

猜你喜欢

转载自blog.csdn.net/cjh94520/article/details/70770020