一份逻辑推理题的程序求解(纯属自娱自乐)
闲来无聊,看到 QQ空间上转载了一份变态推理题的,至少表示我看了十多分钟无处下手,认识的人中有大神居然真的做出来了。。。我不知道他是们那么做的,不过作为编程爱好者,我第一时间想到的是写个程序把答案找出来(不要吐槽)。于是我就动手了。。。不过,这个简单的还是花了我2个小时。。。
下面,先给大家看一看题目:
这十道题可谓丧心病狂,因为题目答案高度关联,居然出现了多少个A多少个B这样的选项,不做完全卷根本不知道每道题对错。。。我简单分析了一下,也只看出切入点大概在第七八九题和第二题的样子吧,简单的分析就可以大概知道答案整体的A选项数量,然后慢慢推,不过期间貌似也有好几步要靠试才能试出来。。。。
我承认我没有那推理能力,所以我想到了用一个小程序。。。十层循环遍历所有可能方案,然后用十层判断过滤方案,找到正确答案。
我的程序是用python写的,用0 1 2 3 来代表ABCD,每层循环变量的取值就代表了每道题的答案,构建一个当前方案t_result,比如i0 = 1 i1 = 0 就对应着第一题选B第二题选A。遍历十层的效果就是这样,
考虑到可能结果不止一个,我另外定义一个叫final_result的列表来保存所有符合要求的结果。
然后是按照题目要求进行规则判断,即进行十层(实际只有九层)if判断来遍历所有方案,得到符合要求的结果,一旦某一环节不符合就由continue语句跳出当前结果,进入下一轮,一直留到最后的就是正确结果了!
每道题具体分析与对应的代码如下:
1、第一个答案是A的题目是哪个?()
A、1 B、2 C、3 D、4
对第一道题的约束条件,我使用了for循环找到当前方案中第一个答案是A的题目序号,并与第一题答案对应的题目进行比较,选项一致的才能通过进入下一层过滤。由于观察发现ABCD选项答案对应的index序号且与ABCD的表示相等,所以最后的判断可以直接简化为比较答案序号与答案,如:当前方案第一题选A,那么第一道选A的题正好就是第一题,通过。
#规则一:第一个答案是A的结果 index = 0 for each_answer in t_result: if each_answer == 0: break else: if index < 4: index+=1 #print '第一个答案是A的题是:',index+1 if not (t_result[index] == index): #print '不符合第一条' continue else: #规则二:唯一具有两个相同答案的问题:……
2、唯一两个具有连续相同答案的问题是:()
A、5,6 B、6,7 C、7,.8 D、8,9
对于第二题,要求找到唯一两个连续相同答案,所以我另写了一个方法find_same_answer,来得到有连续相同答案的个数。
#寻找有相同答案问题的方法 def find_same_answer(result): count = 0 for i in range(9): if result[i] == result[i+1]: count += 1 return count
只有连续相同答案个数为1,并且它的位置正好出先在当前方案答案对应的位置,才能通过。如:当前方案选B,find_same_answer返回1,而第6,7题结果恰好相等,且方案通过。
#规则二:唯一具有两个连续相同答案的问题: if not ((find_same_answer(t_result) == 1) and ((t_result[1] == 0 and t_result[4] == t_result[5]) or \ (t_result[1] == 1 and t_result[5] == t_result[6]) or \ (t_result[1] == 2 and t_result[6] == t_result[7]) or \ (t_result[1] == 3 and t_result[7] == t_result[8]))): #print '不符合第二条' continue else: #规则三:本问题与哪个问题答案相同……
3、本问题答案与那一个问题答案相同?()
A、4 B、9 C、8 D、2
这题相对容易些,只要判断第三题答案是否与选项对应的题目答案相同即可。、
#规则三:本问题与哪个问题答案相同 if not ((t_result[2] == 0 and t_result[2] == t_result[3]) or\ (t_result[2] == 1 and t_result[2] == t_result[8]) or\ (t_result[2] == 2 and t_result[2] == t_result[7]) or\ (t_result[2] == 3 and t_result[2] == t_result[1]) ): #print '不符合第三条' continue else: #规则四:答案是A的个数……
4、答案是A的问题个数是:()
A、5 B、4 C、3 D、2
为了搞定这道题并方便后面的判断,我又写了一个函数X_count,来计算当前方案中答案为X的题目个数:
#计算答案是X的个数的方法: def X_count(result,x): count = 0 for each in result: if each == x: count += 1 return count
如果对应的选项答案符合,就可以通过。
#规则四:答案是A的个数 if not ((t_result[3] == 0 and X_count(t_result,0) == 5) or\ (t_result[3] == 1 and X_count(t_result,0) == 4) or\ (t_result[3] == 2 and X_count(t_result,0) == 3) or\ (t_result[3] == 3 and X_count(t_result,0) == 2) ): #print '不符合第四条' continue else: #规则五:本问题与哪个问题答案相同……
5、本问题答案与那一道题问题答案相同?()
A、1 B、2 C、3 D、4
这道题也好说,只要判断选项是否成立即可
#规则五:本问题与哪个问题答案相同 if not ((t_result[4] == 0 and t_result[4] == t_result[0]) or\ (t_result[4] == 1 and t_result[4] == t_result[1]) or\ (t_result[4] == 2 and t_result[4] == t_result[2]) or\ (t_result[4] == 3 and t_result[4] == t_result[3]) ): #print '不符合第五条' continue else: #规则六:选A问题个数与选什么的问题个数相同……
6、答案选A的问题个数与答案选胜的的问题个数相等?()
A、无 B、C C、C D、D
借用X_count方法,道题的判断不难实现,遇上一题类似,只不过对于选项A、无,要麻烦一些,确保选A的个数与选BCD的个数都不相同。
#规则六:选A问题个数与选什么的问题个数相同 if not ((t_result[5] == 0 and not((X_count(t_result,0) == X_count(t_result,1)) or\ (X_count(t_result,0) == X_count(t_result,2)) or\ (X_count(t_result,0) == X_count(t_result,3)))) or\ (t_result[5] == 1 and X_count(t_result,0) == X_count(t_result,2)) or\ (t_result[5] == 2 and X_count(t_result,0) == X_count(t_result,2)) or\ (t_result[5] == 1 and X_count(t_result,0) == X_count(t_result,3)) ): #print '不符合第六条' continue else: #规则七:与下一题相差……
7、按照字母顺序,本题答案与下一题相差()(A与B间,B与A间都差1)
A、3 B、2 C、1 D、0
这道题如果直接按照题目描述,判断条件会很麻烦,还涉及到求绝对值,所以我进行了简单的分析,发现第7题选A的话下一题(第8题)只能选D,选B的话下一题只能选D,选C的话下一题可选A或D,选D的话下一题也只能选D,所以得到这道题的判断条件:
#规则七:与下一题相差 if not ((t_result[6] == 0 and t_result[7] == 3) or\ (t_result[6] == 1 and t_result[7] == 3) or\ (t_result[6] == 2 and (t_result[7] == 3 or t_result[7] == 1))or\ (t_result[6] == 3 and t_result[7] == 3) ): #print '不符合第七条' continue else: #规则八、九:十道题中元音题数目……
8、十道题中答案为元音的题目数为()
A、0 B、1 C、2 D、3
9、是道题中答案为辅音的题目数为()
A、是合数 B、是质数 C、<= 5 D、是平方数
这两道题虽然看起来很吓人,不过其实如果稍加分析的话,可以排除很多答案,完全可以作为解整份题的突破点。
首先,元音只有A,辅音为BCD。第八题决定了选元音答案(即A)的数只能为0 1 2 3 ,那么第九题中辅音答案(BCD)个数也只能为7 8 9 10,不可能小于等于5,第九题C排除,而这四个数中8 9 10为合数,9又为平方数,所以第九题选D那么A也正确,因此第九题D也排除,又因为第一题就决定了题目中有A选项,所以第八题不选A而辅音数为7 或 8,所以这两道题只剩两种情况可选:辅音数为7,8选D 9选B;或者辅音数为8,8选C 9选A。因此判断条件也就简化了:
#规则八、九:十道题中元音题数目 if not ((t_result[7] == 2 and X_count(t_result,0) == 2) or\ (t_result[7] == 3 and X_count(t_result,0) == 3)): #print '不符合第八九条' continue else: print '得到了一个结果!'
10、本题答案为()
A、A B、B C、C D、D
这道题明显属于打酱油,答案完全取决于之前的九道题目,不管选什么,只要使得之前的九道题目都合理就好,因此不需要再加判断。
好了,上面我们写了那么多,终于可以遍历并过滤了所有4^10种方案,得到合理的结果,所以我们还差最后一步,那就是打印的显示出最终答案。所以,我有的一些了一个打印函数,把列表里的数字改为祖母选项打印出来:
#打印结果的方法 def print_result(result): new = [] for each in result: if each == 0: new.append('A') if each == 1: new.append('B') if each == 2: new.append('C') if each == 3: new.append('D') print new
最后调用一下这个方法,并把结果存到final_result列表里:
print '得到了一个结果!' print_result(t_result) final_result.append(t_result)
最后可以再打印一下final_result,看看所有结果:
print 'final_result',final_result
Ok,大功告成,完整的程序我附在了附件里,按F5运行,就得到了打印出的结果:
于是,借助计算机,我们费了很少的脑力解出了一份让无数人头疼的逻辑推理题。现在,我们拍着胸脯向周围的小伙伴们说:这十道题有唯一的答案A, C, B, C, A, C, D, D, B, A 了!
乔布斯说过,计算机是人类思想的自行车,学会用计算机是一门很重要的技能,它可以让普通人也有能力做到天才能做的事,甚至完成的更好。所以,下次在生活中遇到令人头疼的难题时,不妨开拓一下思路,想想可不可以用计算机程序来解决,可能就会事半功倍呦!
相关推荐
通过这个逻辑推理题,我们可以学习到,在分析问题时,要充分考虑到可能影响结果的所有因素,避免做出片面的判断。 接下来是关于选举的逻辑推理题。这个题目要求我们理解逻辑推断中的“全称命题”,即如果一个特定...
"界"这个标签可能是指用户界面(UI)或图形用户界面(GUI),意味着这个程序提供了一个可视化的交互方式,让用户可以方便地进行逻辑推理题的解答或者浏览。一个良好的界面设计能够提升用户体验,使得复杂的逻辑过程...
《综合能力测试提分题库之逻辑推理题精选320道详解.pdf》这一题库资源的推出,为广大考生和逻辑推理爱好者提供了一套实用的学习工具。 题库的权威性在于其由www.wuyouquizhi.com及其旗下机构——天天向上求职工作室...
标题中的“迄今为止最经典的逻辑推理题99”表明这是一份集合了99个具有代表性和挑战性的逻辑推理问题的资源。逻辑推理是人类思维的重要组成部分,尤其在数学、哲学、计算机科学等领域扮演着核心角色。它涉及到如何...
75道逻辑推理题的答案文档("75道逻辑题答案.doc")可以作为自我评估的工具,帮助检验自己的理解是否正确,理解解题思路。原始题目文档("75道逻辑推理题.doc")则提供了实践的机会。通过解答这些题目,IT从业者可以...
【智力与逻辑推理经典题】 逻辑推理是一种重要的思维方式,它能帮助我们分析复杂的问题,做出合理的判断。在解决逻辑推理问题时,往往需要运用倒推、归纳等方法,结合问题的特点,逐步找到最优的解决方案。 海盗分...
### IT面试常见的逻辑推理题解析 #### 1. 长直管子中的球变换问题 **题目描述**:一个粗细均匀的长直管子,两端开口,里面有4个白球和4个黑球,球的直径、两端开口的直径等于管子的内径,现在白球和黑球的排列是...
### 逻辑推理题精选300道详解 #### “社会人”假设的管理方式 - **知识点概述**:“社会人”假设是组织行为学中的一个重要概念,它强调人际关系的重要性超过了物质利益,在工作场所中,良好的人际交往对于提高员工...
软件公司笔试经典逻辑推理题附答案;软件公司笔试经典逻辑推理题附答案;软件公司笔试经典逻辑推理题附答案;软件公司笔试经典逻辑推理题附答案
题目给出的是一系列逻辑推理题,如31题至60题,要求考生根据给出的条件选择正确选项。逻辑推理题通常涉及逻辑关系、假设检验、归纳推理、演绎推理等。 2. **逻辑表达**:例如第31题,它表达的是条件关系:“除非...
逻辑推理新趣题逻辑推理新趣题逻辑推理新趣题逻辑推理新趣题
逻辑推理题的表格处理法是一种高效解决这类问题的策略,尤其适用于那些包含多个条件和变量的问题。这种方法通过将所有信息整理成清晰的表格形式,帮助我们系统地分析和排除错误选项,最终找到正确的答案。 首先,...
推理机是实现这一过程的程序,它能够按照设定的规则进行推导。 推理有多种类型,包括**演绎推理**、**归纳推理**、**默认推理**以及**非单调推理**等。**演绎推理**是从全称判断(一般性知识)推导出特称判断或单称...
下面,我们通过一个具体的逻辑推理题例子,来说明Python程序是如何被应用到逻辑推理题求解中的。假设我们面对的题目是需要解决一个类比推理问题,涉及到颜色和形状的匹配。程序首先需要定义颜色和形状的集合,然后...
公务员考试逻辑推理题技巧大全 公务员考试逻辑推理题技巧大全是公务员考试中的一种重要题型,旨在考察考生的逻辑思维能力和分析能力。本资源提供了逻辑推理题的技巧大全,涵盖了条件有矛盾真假的分辨、逻辑矛盾的...
公务员逻辑推理题含答案.pdf
从给定的文件中,我们可以提炼出多个涉及逻辑...综上所述,这些逻辑推理题不仅考验了考生的逻辑思维能力,还涉及到了经济学、政治学、医学等多个领域的知识,体现了逻辑学作为一门基础学科在现实生活中的广泛应用价值。