大家好,欢迎来到IT知识分享网。
摘录自:http://blog.csdn.net/akmissxt/article/details/79463632
问题描述:
问题分析:
1. 推理
2. 编程方法,暴力激活成功教程
推理办法:
第一题,废题
第二题,开始依次试第二题的答案
2A—》5C—>9C—->1==6; 3[A|B|C|D](X)
2B—》5D—>7D—->A,B,C,D>=2; 3A—>4B—->6B—–>7B(X)
3B—->2B—->4B—–>7B(X)
3[C|D](X)
2C—》5A—>8A; 3[B|C|D](X)
3A—->4C—->6C—->1==9—->10A; //此时只有1,7,9没有确认
7[A|C](X) //第七题最少的字母应该是B和D
7B—–>1D—->9D(X) //7的答案与1不相邻
7D—–>1A—–>9A(X) //不满足第九题
1B—–>9B(YES)
最终的答案整理得 【B,C,A,C,A,C,D,A,B,A】
程序如下:
import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * 题目:如何看待2018年刑侦科推理试题 * 解法:穷举法。生成所有可能的答案组合(共1<<20种组合),将2-10题目作为筛选条件(第1题没有信息量) * @author Hello stranger * */
public class Reasoning { /** * 生成数组 * @param set */
public static void generate(Set set){ //1号位
for (int b = 1; b < 5; b++) { //2
for (int c = 1; c < 5; c++) { //3
for (int d = 1; d < 5; d++) { //4
for (int e = 1; e < 5; e++) { //5
for (int f = 1; f < 5; f++) { //6
for (int g = 1; g < 5; g++) { //7
for (int h = 1; h < 5; h++) { //8
for (int i = 1; i < 5; i++) { //9
for (int j = 1; j < 5; j++) { //10
for (int k = 1; k < 5; k++) { int[] a = new int[11]; a[0] = 1;//判断是否符号条件标识位
put(a,1,b); put(a,2,c); put(a,3,d); put(a,4,e); put(a,5,f); put(a,6,g); put(a,7,h); put(a,8,i); put(a,9,j); put(a,10,k); set.add(a); } } } } } } } } } } } /** * * @param arr 数组 * @param y 数组下标 * @param x 数组的值(1、2、3、4 对应A、B、C、D) */
public static void put(int[] a,int y,int x){ a[y] = x; } //第二题
public static void second(int[] a){ if(a[5] == 3 && a[2] == 1){} else if(a[5] == 4 && a[2] == 2){} else if(a[5] == 1 && a[2] == 3){} else if(a[5] == 2 && a[2] == 4){} else{ a[0] = 0; } } //第三题
public static void third(int[] a){ if(a[2]==a[3] && a[3]==a[4] && a[3]!=a[6] && a[3] == 2){}//234答案相同
else if(a[2]==a[3] && a[3]==a[6] && a[3]!=a[4] && a[3] == 4){}//236答案相同
else if(a[2]==a[4] && a[4]==a[6] && a[4]!=1 && a[3] == 1){}//246答案相同
else if(a[3]==a[4] && a[4]==a[6] && a[3]!=a[2] && a[3] == 3){}//346答案相同
else{//不符合条件
a[0] = 0; } } //第四题
public static void fourth(int[] a){ if(a[1] == a[5] && a[4] == 1){} else if(a[2] == a[7] && a[4] == 2){} else if(a[1] == a[9] && a[4] == 3){} else if(a[6] == a[10] && a[4] == 4){} else{ a[0] = 0; } } //第五题
public static void fifth(int[] a){ if(a[5] == a[8] && a[5] == 1 ){} else if(a[5] == a[4] && a[5] == 2){} else if(a[5] == a[9] && a[5] == 3){} else if(a[5] == a[7] && a[5] == 4){} else{ a[0] = 0; } } //第六题
public static void sixth(int[] a){ if(a[2] == a[8] && a[4] == a[8] && a[6] == 1 ){} else if(a[1] == a[8] && a[6] == a[8] && a[6] == 2){} else if(a[3] == a[8] && a[10] == a[8] && a[6] == 3){} else if(a[5] == a[8] && a[9] == a[8] && a[6] == 4){} else{ a[0] = 0; } } //第七题 //这10题中被选中次数最少的
public static void seventh(int[] a){ int min = count(a, "min"); if(min == 1 && a[7] == 3){} else if(min == 2 && a[7] == 2){} else if(min == 3 && a[7] == 1){} else if(min == 4 && a[7] == 4){} else{ a[0] = 0; } } //第八题
public static void eighth(int[] a){ if(a[1]-1 != a[7] || a[1]+1 != a[7] && a[8] == 1){} else if(a[1]-1 != a[5] || a[1]+1 != a[5] && a[8] == 2){} else if(a[1]-1 != a[2] || a[1]+1 != a[2] && a[8] == 3){} else if(a[1]-1 != a[10] || a[1]+1 != a[10] && a[8] == 4){} else{ a[0] = 0; } } //第九题
public static void nineth(int[] a){ if(a[1] == a[6]){ if(a[6] != a[5] && a[9] == 1){} else if(a[10] != a[5] && a[9] == 2){} else if(a[2] != a[5] && a[9] == 3){} else if(a[9] != a[5] && a[9] == 4){} else{ a[0] = 0; } }else{ if(a[6] == a[5] && a[9] == 1){} else if(a[10] == a[5] && a[9] == 2){} else if(a[2] == a[5] && a[9] == 3){} else if(a[9] == a[5] && a[9] == 4){} else{ a[0] = 0; } } } //第十题
public static void tenth(int[] a){ int sub = count(a, "sub"); if(sub == 3 && a[10] == 1){} else if(sub == 2 && a[10] == 2){} else if(sub == 4 && a[10] == 3){} else if(sub == 1 && a[10] == 4){} else{ a[0] = 0; } } /** * TODO:统计返回最大出现次数与最小出现次数的差,或返回出现次数最小的选项 * @param a 数组 * @param m "sub"返回次数差,否则返回出现次数最小的选项 * @return
*/
public static int count(int[] a,String m){ int[] num = new int[5]; for(int i=1; i<11; i++){ if(a[i] == 1){ num[1] ++; } else if(a[i] == 2){ num[2]++; } else if(a[i] == 3){ num[3]++; } else{ num[4]++; } } int max = Math.max(num[1], Math.max(num[2], Math.max(num[3], num[4]))); int min = Math.min(num[1], Math.min(num[2], Math.min(num[3], num[4]))); if("sub".equals(m)){ return max - min; }else{ if(min == num[1]){ return 1; }else if(min == num[2]){ return 2; }else if(min == num[3]){ return 3; }else{ return 4; } } } public static void main(String[] args) { int num = 0; HashSet<int[]> set = new HashSet<int[]>(); generate(set); for(int[] a : set){ second(a); third(a); fourth(a); fifth(a); sixth(a); seventh(a); eighth(a); nineth(a); tenth(a); //输出符合条件的答案
if(a[0] == 1){ for(int j : Arrays.copyOfRange(a, 1, a.length)){ char result = '0'; if(j==1) { result = 'A'; }else if(j==2) { result = 'B'; }else if(j==3) { result = 'C'; }else if(j==4) { result = 'D'; } System.out.print(result+","); } System.out.println(); } } } }
结果:B,C,A,C,A,C,D,A,B,A
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33346.html