网传“2018年刑侦科推理试题”

2018年03月01日上午,江苏网警官方微博发布了一套“2018年刑侦科推理试题”,微博发布后迅速走红网络。众多网友看到题目不到10秒就放弃了,戏称这套推理题打碎了他们的刑侦梦。
网传“2018年刑侦科推理试题”_第1张图片
第二天晚上,江苏网警在评论区对该推理试题进行解释。“这套题目最初是杭州学军中学推理社的招新考题,由时任社长编写”,“这不是正经的刑侦试题,真正的考题,除了考察逻辑思维,还有考察对专业知识的记忆理解运用”。

题目于下
网传“2018年刑侦科推理试题”_第2张图片
不知你看完是什么心情,反正我和众多网友一样“好奇心让我点了进来,求生欲使我退了出去”,我试着推理,用了好几张稿纸也没找出头绪。请教了别人,终于用暴力枚举的方法解了出来。

代码于下
public class Reasoning {

int problem[]=new int[10];//记录10道单选题的答案
boolean flag=true;//终止循环的条件,枚举到符合题目逻辑的序列时,终止循环

//暴力枚举,每道题有A B C D四种可能,则10道题共有4的十次方种可能
public void violenceEnumeration(int i) {
	i++;
	for(int k=0;k<4 && flag==true;k++) {
		
		problem[i-1]=k;//0代表A,1代表B,2代表C,3代表D
		
		if(i!=10) {
			violenceEnumeration(i);
		}else {
			judge(problem);//判断是否枚举到了正确的答案,如果枚举到正确的答案则终止循环
		}
	}
}//结束violenceEnumeration方法

//判断是否枚举到了正确的答案,如果枚举到正确的答案则终止循环
public void judge(int [] array) {
	int a=0, b=0,c=0,d=0;//分别记录10道题中A B C D四个选项的个数
	int minLetter=0;//记录10道题中个数最少的选项的个数
	int maxLetter=0;//记录10道题中个数最多的选项的个数
	boolean tf=false;//判断第9题“第1题与第6题的答案相同”的真假性
	
	for(int i=0; i1) || (problem[7]==1 && Math.abs(problem[0]-problem[4])>1) || (problem[7]==2 && Math.abs(problem[0]-problem[1])>1) || (problem[7]==3 && Math.abs(problem[0]-problem[9])>1))&&
			( (problem[8]==0 && ((tf==true && problem[4]!=problem[5]) || (tf==false && problem[4]==problem[5]))) || (problem[8]==1 && ((tf==true && problem[4]!=problem[9]) || (tf==false && problem[4]==problem[9]))) || (problem[8]==2 && ((tf==true && problem[4]!=problem[1]) || (tf==false && problem[4]==problem[1]))) || (problem[8]==3 && ((tf==true && problem[4]!=problem[8]) || (tf==false && problem[4]==problem[8]))) )&&
			( (problem[9]==0 && (maxLetter-minLetter==3)) || (problem[9]==1 && (maxLetter-minLetter==2)) || (problem[9]==2 && (maxLetter-minLetter==4)) || (problem[9]==3 && (maxLetter-minLetter==1)) )
			
			) {
		
		//当枚举到符合题目逻辑的序列终止循环,并打印出各题的答案选项
		for(int k=0; k

}//结束Reasoning类

运行结果为
【1】B 【2】C 【3】A 【4】C 【5】A 【6】C 【7】D 【8】A 【9】B 【10】A
这与江苏网警公布的答案一致。但我还是很佩服那些直接推理出来的大佬,逻辑思维能力太强了。

你可能感兴趣的:(网传“2018年刑侦科推理试题”)