2018年刑侦科推理试题之java写法

2020_5_6
刚刚在学Linux的Shell的时候用shell的写法重新写了一遍,发现这份java的写法里面有几个挺严重的问题-----题目有很多的限制并没有写上去,虽然也可以运行的出结果,但这是因为题目数量和条件的限制所导致的,如果题目稍微多一些的话话,那一定会出现错误答案

在这里插入图片描述


import java.util.Arrays;

public class Main {

	public static Boolean isTrue(char[] aw) {
		Boolean rs = true;// 第一题永远成立
		for (int i = 2; i <= aw.length; i++) {
			if (rs == false) {
				return false;//如果那一道题不成立则退出判断
			}

			switch (i) {
			case 2:
				rs = demo_2(aw);
				break;
			case 3:
				rs = demo_3(aw);
				break;
			case 4:
				rs = demo_4(aw[0], aw[1], aw[3], aw[4], aw[5], aw[6], aw[8], aw[9]);
				break;
			case 5:
				rs = demo_5(aw[3], aw[4], aw[6], aw[7], aw[8]);
				break;
			case 6:
				rs = demo_6(aw);
				break;
			case 7:
				rs = demo_7(aw);
				break;
			case 8:
				rs = demo_8(aw);
				break;
			case 9:
				rs = demo_9(aw);
				break;
			case 10:
				rs = demo_10(aw);
				break;
			}
		}
		return true;
	}

	// 第二题判断
	public static Boolean demo_2(char[] aw) {
		switch (aw[1]) {
		case 'a':
			if (aw[4] == 'c') {
				return true;
			}
			break;
		case 'b':
			if (aw[4] == 'd') {
				return true;
			}
			break;
		case 'c':
			if (aw[4] == 'a') {
				return true;
			}
			break;
		case 'd':
			if (aw[4] == 'b') {
				return true;
			}
			break;
		}
		return false;
	}

	// 第三题判断
	public static Boolean demo_3(char[] aw) {
		switch (aw[2]) {
		case 'a':
			if (aw[2] != aw[1] && aw[2] != aw[3] && aw[2] != aw[5]) {
				return true;
			}
			break;
		case 'b':
			if (aw[5] != aw[1] && aw[5] != aw[2] && aw[5] != aw[3]) {
				return true;
			}
			break;
		case 'c':
			if (aw[1] != aw[2] && aw[1] != aw[3] && aw[1] != aw[5]) {
				return true;
			}
			break;
		case 'd':
			if (aw[3] != aw[1] && aw[3] != aw[2] && aw[3] != aw[5]) {
				return true;
			}
			break;
		}
		return false;
	}

	// 第四题的判断
	public static Boolean demo_4(char aw_1, char aw_2, char aw_4, char aw_5, char aw_6, char aw_7, char aw_9,
			char aw_10) {
		switch (aw_4) {
		case 'a':
			if (aw_1 == aw_5) {
				return true;
			}
			break;
		case 'b':
			if (aw_2 == aw_7) {
				return true;
			}
			break;
		case 'c':
			if (aw_1 == aw_9) {
				return true;
			}
			break;
		case 'd':
			if (aw_6 == aw_10) {
				return true;
			}
			break;
		}
		return false;
	}

	// 第五题判断
	public static Boolean demo_5(char aw_4, char aw_5, char aw_7, char aw_8, char aw_9) {
		switch (aw_5) {
		case 'a':
			if (aw_5 == aw_8) {
				return true;
			}
			break;
		case 'b':
			if (aw_5 == aw_4) {
				return true;
			}
			break;
		case 'c':
			if (aw_5 == aw_9) {
				return true;
			}
			break;
		case 'd':
			if (aw_5 == aw_7) {
				return true;
			}
			break;
		}
		return false;
	}

	// 第六题判断
	public static Boolean demo_6(char[] aw) {
		switch (aw[5]) {
		case 'a':
			if (aw[7] == aw[1] && aw[7] == aw[3]) {
				return true;
			}
			break;
		case 'b':
			if (aw[7] == aw[0] && aw[7] == aw[5]) {
				return true;
			}
			break;
		case 'c':
			if (aw[7] == aw[2] && aw[7] == aw[9]) {
				return true;
			}
			break;
		case 'd':
			if (aw[7] == aw[4] && aw[7] == aw[8]) {
				return true;
			}
			break;
		}
		return false;
	}

	// 第七题判断
	public static Boolean demo_7(char[] aw) {
		int[] num = count(aw);
		switch (aw[6]) {
		case 'a':
			if (num[2] < num[0] && num[2] < num[1] && num[2] < num[3]) {
				return true;
			}
			break;
		case 'b':
			if (num[1] < num[0] && num[1] < num[2] && num[1] < num[3]) {
				return true;
			}
			break;
		case 'c':
			if (num[0] < num[1] && num[0] < num[2] && num[0] < num[3]) {
				return true;
			}
			break;
		case 'd':
			if (num[3] < num[0] && num[3] < num[1] && num[3] < num[2]) {
				return true;
			}
			break;
		}
		return false;
	}

	// 第八题判断
	public static Boolean demo_8(char[] aw) {
		int[] num = count(aw);
		Arrays.sort(num);
		switch (aw[7]) {
		case 'a':
			if (aw[6] - aw[0] != 1 && aw[0] - aw[6] != -1 &&aw[0] != aw[6] ) {
				return true;
			}
			break;
		case 'b':
			if (aw[4] - aw[0] != 1 && aw[0] - aw[4] != -1&&aw[0] != aw[4]) {
				return true;
			}
			break;
		case 'c':
			if (aw[1] - aw[0] != 1 && aw[0] - aw[1] != -1&&aw[0] != aw[1]) {
				return true;
			}
			break;
		case 'd':
			if (aw[9] - aw[0] != 1 && aw[0] - aw[9] != -1 && aw[0] != aw[9]) {
				return true;
			}
			break;
		}
		return false;
	}

	// 第九题判断
		public static Boolean demo_9(char[] aw) {
			int aw_1_6 = aw[0]==aw[5]?1:0;
			int aw_x_5 = 66100;//这个值必定会有,这里的赋值是为了不报错才给他
			switch (aw[8]) {
			case 'a':
				aw_x_5 = aw[5]==aw[4]?1:0;
				break;
			case 'b':
				aw_x_5 = aw[9]==aw[4]?1:0;
				break;
			case 'c':
				aw_x_5 = aw[1]==aw[4]?1:0;
				break;
			case 'd':
				aw_x_5 = aw[8]==aw[4]?1:0;
				break;
			}
			if(aw_1_6+aw_x_5==1) {
				return true;
			}
			return false;
		}
	
	// 第十题判断
	public static Boolean demo_10(char[] aw) {
		int[] num = count(aw);
		Arrays.sort(num);
		switch (aw[9]) {
		case 'a':
			if (num[3] - num[1] == 3) {
				return true;
			}
			break;
		case 'b':
			if (num[3] - num[1] == 2) {
				return true;
			}
			break;
		case 'c':
			if (num[3] - num[1] == 4) {
				return true;
			}
			break;
		case 'd':
			if (num[3] - num[1] == 1) {
				return true;
			}
			break;
		}
		return false;
	}

	// 统计每一项选择的个数
	public static int[] count(char[] aw) {
		int[] num = { 0, 0, 0, 0 };
		for (int i = 0; i < aw.length; i++) {
			switch (aw[i]) {
			case 'a':
				num[0]++;
				break;
			case 'b':
				num[1]++;
				break;
			case 'c':
				num[2]++;
				break;
			case 'd':
				num[3]++;
				break;
			}
		}
		return num;
	}

	public static void main(String[] args) {
		char[] aw = { 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a' };
		for (int a = 0; a < 4; a++) {
			aw[0] = (char) (aw[0] + a);
			for (int b = 0; b < 4; b++) {
				aw[1] = (char) (aw[1] + b);
				for (int c = 0; c < 4; c++) {
					aw[2] = (char) (aw[2] + c);
					for (int d = 0; d < 4; d++) {
						aw[3] = (char) (aw[3] + d);
						for (int e = 0; e < 4; e++) {
							aw[4] = (char) (aw[4] + e);
							for (int f = 0; f < 4; f++) {
								aw[5] = (char) (aw[5] + f);
								for (int g = 0; g < 4; g++) {
									aw[6] = (char) (aw[6] + g);
									for (int h = 0; h < 4; h++) {
										aw[7] = (char) (aw[7] + h);
										for (int i = 0; i < 4; i++) {
											aw[8] = (char) (aw[8] + i);
											for (int j = 0; j < 4; j++) {
												aw[9] = (char) (aw[9] + j);
												// 判断答案是否正确
												if (isTrue(aw)) {
													System.out.println(Arrays.toString(aw));
												}
												aw[9] = 'a';
											}
											aw[8] = 'a';
										}
										aw[7] = 'a';
									}
									aw[6] = 'a';
								}
								aw[5] = 'a';
							}
							aw[4] = 'a';
						}
						aw[3] = 'a';
					}
					aw[2] = 'a';
				}
				aw[1] = 'a';
			}
			aw[0] = 'a';
		}

	}

}

运行结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值