大家好,欢迎来到Crossin的编程教室!我是Crossin。
之前国庆假期在家闲来无事,找了一本“思维训练手册”(其实就是一些智力题、推理题,甚至“脑筋急转弯”),跟家人一起玩智力游戏。这些题是不是真的可以训练人的思维我不知道,但是看了几题我忍不住要吐槽:这真的不是从“青少年信息学奥林匹克”题库里找出来的题吗?!
里面有不少题,让人做是有的烧(wu)脑(liao),但如果改成编程题,那倒有点意思了。
于是,原本拿着纸笔做题的场景,就立马被我改成了拿出电脑敲代码的画风。
我从里面挑了3题,你们感受一下。
如果你像我一样喜(xian)欢(de)挑(wu)战(liao),也可以来试试,不管用不用编程。
答案在文末,另外也附了我的代码解法,欢迎取用。
1.
(答案见文末)
思路提示:
用程序解这类“智力题”有个屡试不爽的方法,就是“枚举法”,或者叫做“暴力解法”。就是对于存在有限种可能选择的情况下,让程序把每一种情况都试一遍,找出符合条件的解。
这题就可以暴力去解。
当然,暴力最好也要有头脑的暴力。比如这里,5个3位数,从中去掉9个数,听上去有点烦。但反过来想,其实不就是从里面挑6个数字嘛!
100、10、1、300、……、90、9,这15个数里面取6个,使得它们的和是1111,这我已经不能再提示了吧!
对了,再说一句:Python里有个取排列/组合的库,叫做:itertools。谁用谁知道
2.
(答案见文末)
思路提示:
这题就不再适合暴力去解了,因为52个值分到4个盒子里,一共是有4的52次方,也就是20282409603651670423947251286016种情况……
但是仔细想一下,这题也不必暴力。我们只需要把52个值从小到大依次往盒子里放就行。只是放的时候需要判断一下,哪个盒子是“不”能放的,即其中盒子里已有两个数的和等于这个值。如果存在,那么就去下一个盒子,此处不留爷,自有留爷处!(处处不留爷,那一定是题目出错了!)
OK,先就来这3题试试看吧!
讲真,这种题虽然没啥实际意义,但若真要你用代码写出来,也不是那么容易的,很考验你对程序逻辑和数据结构的理解。所以,很多IT公司在招聘开发岗位时也会出一些类似的题,既是考察你分析问题的能力,也能看出你写代码的水平。讲不定哪天你就在面试时碰到我发过的题目呢。(事实上,这种事已经发生过几次了,甚至还有面试官就直接拿我的题目去面人的)
欢迎在留言区分享你的解答!如果大家对此类题目感兴趣,之后我再多弄一些来。
本文题目来源自《思维高手:全世界聪明人都在做的200个思维游戏》
获取相关代码,请在公众号(Crossin的编程教室)里回复关键字:
智力题
答案(设置了白色字体,长按下方空白后选中可见。深色模式请自便!):
1.
111
x3x
x7x
9xx
(此题共有5个解,参见代码输出)
2.
按图上圆圈标记顺序:
2, 5, 8, 9, 3, 4, 6, 7, 1
3.
[1, 2, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52],
[3, 5, 6, 12, 14, 21, 23, 30, 32, 39, 41, 48, 50],
[8, 9, 11, 15, 18, 35, 36, 38, 42],
[17, 20, 24, 26, 27, 29, 33, 45]
(此题也不是唯一解,比如把48放进盒子4也是可以的)
_往期文章推荐_
几道有趣的概率题