使用java程序解推理试题-----2018刑侦科推理试题

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;	
	}
}
 

得出答案为:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值