博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018年刑侦科目推理试题
阅读量:6476 次
发布时间:2019-06-23

本文共 8381 字,大约阅读时间需要 27 分钟。

摘录自:

问题描述:

  

问题分析:

     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
set = new HashSet
(); 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

  

  

 

转载地址:http://belko.baihongyu.com/

你可能感兴趣的文章
Pyrex也许是一个好东西
查看>>
Java内部类总结
查看>>
WINFORM WPF字体颜色相互转换
查看>>
能力不是仅靠原始积累(三)
查看>>
实战:使用终端服务网关访问终端服务
查看>>
彻底学会使用epoll(一)——ET模式实现分析
查看>>
路由器的密码恢复
查看>>
【Android 基础】Android中全屏或者取消标题栏
查看>>
Xilinx 常用模块汇总(verilog)【03】
查看>>
脱离标准文档流(2)---定位
查看>>
IO流之字符流
查看>>
集合异常之List接口
查看>>
Softmax回归
查看>>
紫书 习题11-11 UVa 1644 (并查集)
查看>>
App工程结构搭建:几种常见Android代码架构分析
查看>>
使用openssl进行证书格式转换
查看>>
ZOJ 3777 Problem Arrangement
查看>>
虚拟机类加载机制
查看>>
Callable和Future
查看>>
installshield12如何改变默认安装目录
查看>>