刑侦推理试卷答案【code by JAVA】
2018-03-08 09:47
429 查看
最近网上疯传的一张‘刑侦科推理试卷’让不少小伙伴对自己的智商产生怀疑。当看到这张试卷时,想必大家都兴奋的跃跃欲试,我在尝试了半小时后,写了一大堆草稿,脑袋已成浆糊。不过作为程序猿,自然有独特的打开方式,人脑处理不了,咱们用电脑。10道题4个待选项,用穷举的话最不济运算4^10次,也就100万出头,对于计算机来说小case。以下是代码
import java.util.ArrayList;
import java.util.Collections;
/**
* Created by Huberry on 2018/3/5.
*/
public class Test {
public static void main(String[] args){
exhaustion();
}
private static char[] aList = {'A', 'B', 'C', 'D'};
private static void exhaustion(){
int checkCount = 0;
for(char a1 : aList){
for(char a2 : aList){
for(char a3 : aList){
for(char a4 : aList){
for(char a5 : aList){
for(char a6 : aList){
for(char a7 : aList){
for(char a8 : aList){
for(char a9 : aList){
for(char a10 : aList){
ArrayList<Character> answers = new ArrayList<>();
answers.add(a1);
answers.add(a2);
answers.add(a3);
answers.add(a4);
answers.add(a5);
answers.add(a6);
answers.add(a7);
answers.add(a8);
answers.add(a9);
answers.add(a10);
checkCount++;
if(check(answers)){
System.out.println("checkCount_"+checkCount);
return;
}
}
}
}
}
}
}
}
}
}
}
}
private static boolean check(ArrayList<Character> answers){
char a1 = answers.get(0);
char a2 = answers.get(1);
char a3 = answers.get(2);
char a4 = answers.get(3);
char a5 = answers.get(4);
char a6 = answers.get(5);
char a7 = answers.get(6);
char a8 = answers.get(7);
char a9 = answers.get(8);
char a10 = answers.get(9);
// 第三题 哪个与其他三个不同 3 6 2 4
switch (a3){
case 'A':
if(!(a3!=a6 && a3!=a2 && a3!=a4))
return false;
break;
case 'B':
if(!(a6!=a3 && a6!=a2 && a6!=a4))
return false;
break;
case 'C':
if(!(a2!=a6 && a2!=a3 && a2!=a4))
return false;
break;
case 'D':
if(!(a4!=a3 && a4!=a2 && a6!=a4))
return false;
break;
}
// 第四题 哪两题相同 15 27 19 6,10
switch (a4){
case 'A':
if(!(a1==a5 && a2!=a7 && a1!=a9 && a6!=a10))
return false;
break;
case 'B':
if(!(a1!=a5 && a2==a7 && a1!=a9 && a6!=a10))
return false;
break;
case 'C':
if(!(a1!=a5 && a2!=a7 && a1==a9 && a6!=a10))
return false;
break;
case 'D':
if(!(a1!=a5 && a2!=a7 && a1!=a9 && a6==a10))
return false;
break;
}
// 第五题 哪题与本题相同 8 4 9 7
switch (a5){
case 'A':
if(!(a5==a8 && a5!=a4 && a5!=a9 && a5!=a7))
return false;
break;
case 'B':
if(!(a5!=a8 && a5==a4 && a5!=a9 && a5!=a7))
return false;
break;
case 'C':
if(!(a5!=a8 && a5!=a4 && a5==a9 && a5!=a7))
return false;
break;
case 'D':
if(!(a5!=a8 && a5!=a4 && a5!=a9 && a5==a7))
return false;
break;
}
// 第六题 哪两题与第八题相同 24 16 3,10 59
switch (a6){
case 'A':
if(!((a8==a2 && a8==a4) && (a8!=a1 || a8!=a6) && (a8!=a3 || a8!=a10) && (a8!=a5 || a8!=a9)))
return false;
break;
case 'B':
if(!((a8!=a2 || a8!=a4) && (a8==a1 && a8==a6) && (a8!=a3 || a8!=a10) && (a8!=a5 || a8!=a9)))
return false;
break;
case 'C':
if(!((a8!=a2 || a8!=a4) && (a8!=a1 || a8!=a6) && (a8==a3 && a8==a10) && (a8!=a5 || a8!=a9)))
return false;
break;
case 'D':
if(!((a8!=a2 || a8!=a4) && (a8!=a1 || a8!=a6) && (a8!=a3 || a8!=a10) && (a8==a5 && a8==a9)))
return false;
break;
}
int countA = Collections.frequency(answers, 'A');
int countB = Collections.frequency(answers, 'B');
int countC = Collections.frequency(answers, 'C');
int countD = Collections.frequency(answers, 'D');
ArrayList<Integer> counts = new ArrayList<>();
counts.add(countA);
counts.add(countB);
counts.add(countC);
counts.add(countD);
int countMin = Collections.min(counts);
int countMax = Collections.max(counts);
// 第七题 被选中最少的 C B A D
switch (a7){
case 'A':
if(!(countC == countMin))
return false;
break;
case 'B':
if(!(countB == countMin))
return false;
break;
case 'C':
if(!(countA == countMin))
return false;
break;
case 'D':
if(!(countD == countMin))
return false;
break;
}
// 第八题 哪一题与第一题不相邻 7 5 2 10
int asc1 = (int)a1;
switch (a8){
case 'A':
if(!(Math.abs(asc1-(int)a7)!=1 && Math.abs(asc1-(int)a5)==1 && Math.abs(asc1-(int)a2)==1 && Math.abs(asc1-(int)a10)==1))
return false;
break;
case 'B':
if(!(Math.abs(asc1-(int)a7)==1 && Math.abs(asc1-(int)a5)!=1 && Math.abs(asc1-(int)a2)==1 && Math.abs(asc1-(int)a10)==1))
return false;
break;
case 'C':
if(!(Math.abs(asc1-(int)a7)==1 && Math.abs(asc1-(int)a5)==1 && Math.abs(asc1-(int)a2)!=1 &&a
a37e
mp; Math.abs(asc1-(int)a10)==1))
return false;
break;
case 'D':
if(!(Math.abs(asc1-(int)a7)==1 && Math.abs(asc1-(int)a5)==1 && Math.abs(asc1-(int)a2)==1 && Math.abs(asc1-(int)a10)!=1))
return false;
break;
}
// 第9题 1=6和x=5真假相反 6 10 2 9
boolean same1_6 = a1==a6;
switch (a9){
case 'A':
if(!((same1_6 != (a5==a6)) && (same1_6 == (a5==a10)) && (same1_6 == (a5==a2)) && (same1_6 == (a5==a9))))
return false;
break;
case 'B':
if(!((same1_6 == (a5==a6)) && (same1_6 != (a5==a10)) && (same1_6 == (a5==a2)) && (same1_6 == (a5==a9))))
return false;
break;
case 'C':
if(!((same1_6 == (a5==a6)) && (same1_6 == (a5==a10)) && (same1_6 != (a5==a2)) && (same1_6 == (a5==a9))))
return false;
break;
case 'D':
if(!((same1_6 == (a5==a6)) && (same1_6 == (a5==a10)) && (same1_6 == (a5==a2)) && (same1_6 != (a5==a9))))
return false;
break;
}
// 第十题 答案出现最多的和最少的差值 3 2 4 1
switch (a10){
case 'A':
if(!(countMax-countMin == 3))
return false;
break;
case 'B':
if(!(countMax-countMin == 2))
return false;
break;
case 'C':
if(!(countMax-countMin == 4))
return false;
break;
case 'D':
if(!(countMax-countMin == 1))
return false;
break;
}
System.out.println("1"+a1+ "_2"+a2+ "_3"+a3+ "_4"+a4+ "_5"+a5+ "_6"+a6+ "_7"+a7+ "_8"+a8+ "_9"+a9+ "_10"+a10);
return true;
}
}
运行结果:
可见试了40W次出来正确答案
相关文章推荐
- java大一期末试卷含答案
- Java 往年试卷参考答案!!!
- Java基础试卷及答案
- Java技能测试试卷一及答案
- Java技能测试试卷二及答案
- 2008年4月全国计算机等级考试二级JAVA笔试真题试卷及答案
- 【Java】2018年刑侦科推理试卷
- 40个Java集合面试问题和答案
- 阿里巴巴常考面试题及汇总答案(Java)
- java基础面试题及答案
- Java语言程序设计基础篇原书第十版第二章编程练习题答案
- Java常见面试题(含答案)
- java面试题及答案(转载)
- 华为面试上机题及答案 JAVA写的
- 应聘Java笔试时可能出现问题及其答案
- 2009年9月三级网络技术考试试卷 51CTO版参考答案
- python 2.7 创建问题加答案(选择题-2)生成随机的测试试卷文件
- Think in java 答案_Chapter 2_Exercise 8
- 蓝桥杯2014年以前JAVA历年真题及答案整理——十进制转十六进制