2018刑侦科推理试题
分析:
下面是我写的简单java代码:
package cn.sangol.test;
public class ABCD_Demo {
final static String []ABCD={"*","A","B","C","D"};
public static void main(String[] args) {
String result="答案如下:";
for (int A = 1; A < 5; A++) {for (int B = 1; B < 5; B++) {for (int C = 1; C < 5; C++) {for (int D = 1; D < 5; D++) {for (int E = 1; E < 5; E++) {for (int F = 1; F < 5; F++) {for (int G = 1; G < 5; G++) {for (int H = 1; H < 5; H++) {for (int I = 1; I < 5; I++) {for (int J = 1; J < 5; J++) {
int []answerArr={A,B,C,D,E,F,G,H,I,J};
String answerStr="";
System.out.println("选项为:"+A+B+C+D+E+F+G+H+I+J);
int []ABCDnum0={0,0,0,0};
int []ABCDnum=getNumber(answerArr, ABCDnum0);
System.out.println("猜测:");
if(A==1||A==2||A==3||A==4){
System.out.println("A第 1 题的答案是:"+ABCD[A]);
if((B==1&&E==3)||(B==2&&E==4)||(B==3&&E==1)||(B==4&&E==2)){
System.out.println("B第 2 题的答案是:"+ABCD[B]);
if((C==1&&C!=F&&F==B&&F==D)||(C==2&&C!=F&&C==B&&C==D)||(C==3&&C!=B&&C==F&&C==D)||(C==4&&C!=D&&C==F&&C==B)){
System.out.println("C第 3 题的答案是:"+ABCD[C]);
if((D==1&&A==E)||(D==2&&B==G)||(D==3&&A==I)||(D==4&&F==J)){
System.out.println("D第 4 题的答案是:"+ABCD[D]);
if((E==1&&H==1)||(E==2&&D==2)||(E==3&&I==3)||(E==4&&G==4)){
System.out.println("E第 5 题的答案是:"+ABCD[E]);
if((F==1&&H==B&&H==D)||(F==2&&H==A&&H==F)||(F==3&&H==C&&H==J)||(F==4&&H==E&&H==I)){
System.out.println("F第 6 题的答案是:"+ABCD[F]);
if((G==1&&MinStr(ABCDnum0,3))||(G==2&&MinStr(ABCDnum0,2))||(G==3&&MinStr(ABCDnum0,1))||(G==4&&MinStr(ABCDnum0,4))){
System.out.println("G第 7 题的答案是:"+ABCD[G]);
if((H==1&&!Xlin(A,G))||(H==2&&!Xlin(A,E))||(H==3&&!Xlin(A,B))||(H==4&&!Xlin(A,J))){
System.out.println("H第 8 题的答案是:"+ABCD[H]);
if((I==1&&((A==F&&E!=F)||(A!=F&&E==F)))||(I==2&&((A==F&&E!=J)||(A!=F&&E==J)))||(I==3&&((A==F&&E!=B)||(A!=F&&E==B)))||(I==4&&((A==F&&E!=I)||(A!=F&&E==I)))){
System.out.println("I第 9 题的答案是:"+ABCD[I]);
if((J==1&&Diff(ABCDnum)==3)||(J==2&&Diff(ABCDnum)==2)||(J==3&&Diff(ABCDnum)==4)||(J==4&&Diff(ABCDnum)==1)){
System.out.println("J第 10 题的答案是:"+ABCD[J]);
for (int k = 0; k < answerArr.length; k++) {
answerStr+=(k+1)+"、"+ABCD[answerArr[k]]+"\t";
}
result+="\n"+answerStr;
}}}}}}}}}}
}}}}}}}}}}
System.out.println("-------"+result);
}
//获取次数ABCD
private static int[] getNumber(int[] answerArr,int []ABCDnum0) {
int []ABCDnum={0,0,0,0};
for (int i = 0; i < answerArr.length; i++) {
ABCDnum0[answerArr[i]-1]++;
ABCDnum[answerArr[i]-1]++;
}
System.out.println("ABCDnum出现次数:"+ABCDnum0[0]+"-----"+ABCDnum0[1]+"-----"+ABCDnum0[2]+"-----"+ABCDnum0[3]);
for (int i = 0; i < ABCDnum.length -1 ; i++) {
for (int j = i+1; j < ABCDnum.length; j++) {
int temp ;
if(ABCDnum[i]>ABCDnum[j]){
temp = ABCDnum[i];
ABCDnum[i] = ABCDnum[j];
ABCDnum[j] = temp;
}
}
}
System.out.println("ABCDnum排序后次数:"+ABCDnum[0]+"-----"+ABCDnum[1]+"-----"+ABCDnum[2]+"-----"+ABCDnum[3]);
return ABCDnum;
}
//返回最大出现次数和最小出现次数之差
private static int Diff(int[] ABCDnum) {
System.out.println("最大出现次数和最小出现次数之差为:"+(ABCDnum[3]-ABCDnum[0]));
return ABCDnum[3]-ABCDnum[0];
}
//两个数字是否相邻
private static boolean Xlin(int a, int g) {
if(a+1==g||a-1==g){return true;}else{
System.out.println(ABCD[a]+"与"+ABCD[g]+"不相邻,过!");
}
return false;
}
//返回是否最小出现次数
private static boolean MinStr(int []ABCDnum0,int i) {
int firstnum=ABCDnum0[i-1];
for (int j = 0; j < ABCDnum0.length; j++) {
if(firstnum>ABCDnum0[j]){
System.out.println(ABCD[i]+"不是出现次数最小的,过!"+firstnum+">"+ABCDnum0[j]);
return false;
}
}
return true;
}
}
得出答案为: