网红题2018刑侦科推理测试题(终于敲出来啦!!!!!!)

哈哈哈哈哈哈,终于把他敲出来了,附心路历程(关键下面那个特特特特特别大的循环一共循环了1048576次,次数太多了,能不能再简单点呢)


心路历程:正常逻辑思考

已知: 一.单选
           二.9题为入口
           三.两个条件:
               1.1题与6题答案相同为真,X题与5题答案相同为假
               2.1题与6题答案相同为假,X题与5题答案相同为真

           四.2题不与任何一题答案相同


解:

    令1题与6题答案相同为真,则1,6,8题答案B

    8题答案B,5题与1题答案不相邻,1题答案B,所以5,7题D

    答案字母出现次数最少,既出现次数为1,若为2,则其他选项出现次数为333,+2=11>10,所以假设失败

    正确条件是X题与5题答案相同为真

    X题与5题答案相同,由9题知2,6,9,10题中只有一题与5题答案相同,由5题知4,7,8,9题中只有一题与5题答案相同,9题不与5题答案相同,所以6题C

    由上述已知得6题不与5题相同,且3,10,8答案相同,所以9题B,则3,8,10,5题答案相同

    得出3,8,10,5题A,所以2题C

    又因为7题答案不是C,由8题知7题与1题答案不相邻,去4题排除BDA,所以4题C,1题B

    因为8题答案是A,所以7题D

代码这么写的:
package com.yunzhi.edu.controller;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Test {

    //list是答案集合,对应下面每一道题得答案,有一个不满足就返回false,都满足返回true
    public static boolean bln(List<String> list) {
        if (!T1(list)) {
            return false;
        }
        if (!T2(list)) {
            return false;
        }
        if (!T3(list)) {
            return false;
        }
        if (!T4(list)) {
            return false;
        }
        if (!T5(list)) {
            return false;
        }
        if (!T6(list)) {
            return false;
        }
        if (!T7(list)) {
            return false;
        }
        if (!T8(list)) {
            return false;
        }
        if (!T9(list)) {
            return false;
        }
        if (!T10(list)) {
            return false;
        }
        return true;
    }

    //1T:这道题选啥?(A A,B B,C C,D D)。第一题写不写对程序没啥影响,根本没影响
    public static boolean T1(List<String> list) {
        String str = list.get(0);
        if (str.equals("A")) {
            boolean flag = (str.equals("A"));
            return flag;
        }
        if (str.equals("B")) {
            boolean flag = (str.equals("B"));
            return flag;
        }
        if (str.equals("C")) {
            boolean flag = (str.equals("C"));
            return flag;
        }
        if (str.equals("D")) {
            boolean flag = (str.equals("D"));
            return flag;
        }
        return false;
    }

    //2T:第5题选啥?(A C,B D,C A,D B)。写不写这道题还是没啥影响
    public static boolean T2(List<String> list) {
        String str = list.get(1);
        if (str.equals("A")) {
            //5T答案C
            String a = list.get(4);
            boolean flag = (a.equals("C"));
            return flag;
        }
        if (str.equals("B")) {
            //5T答案D
            String a = list.get(4);
            boolean flag = (a.equals("D"));
            return flag;
        }
        if (str.equals("C")) {
            //5T答案A
            String a = list.get(4);
            boolean flag = (a.equals("A"));
            return flag;
        }
        if (str.equals("D")) {
            //5T答案B
            String a = list.get(4);
            boolean flag = (a.equals("B"));
            return flag;
        }
        return false;
    }

    //3T:以下选项中哪一个与其他三个不同?(A 3,B 6,C 2,D 4)。既三个一样的,一个不一样的
    public static boolean T3(List<String> list) {
        String str = list.get(2);
        if (str.equals("A")) {
            //2T4T6T答案相同
            String a = list.get(1);
            String b = list.get(3);
            String c = list.get(5);
            boolean flag = (a.equals(b) && a.equals(c) && b.equals(c));
            return flag;
        }
        if (str.equals("B")) {
            //2T3T4T答案相同
            String a = list.get(1);
            String b = list.get(2);
            String c = list.get(3);
            boolean flag = (a.equals(b) && a.equals(c) && b.equals(c));
            return flag;
        }
        if (str.equals("C")) {
            //3T4T6T答案相同
            String a = list.get(2);
            String b = list.get(3);
            String c = list.get(5);
            boolean flag = (a.equals(b) && a.equals(c) && b.equals(c));
            return flag;
        }
        if (str.equals("D")) {
            //2T3T6T答案相同
            String a = list.get(1);
            String b = list.get(2);
            String c = list.get(5);
            boolean flag = (a.equals(b) && a.equals(c) && b.equals(c));
            return flag;
        }
        return false;
    }

    //4T:以下选项中哪两题答案相同?(A 1T5T,B 2T7T,C 1T9T, D 6T10T)。既选项中两道题答案相同
    public static boolean T4(List<String> list) {
        String str = list.get(3);
        if (str.equals("A")) {
            //1T5T答案相同
            String a = list.get(0);
            String b = list.get(4);
            boolean flag = a.equals(b);
            return flag;
        }
        if (str.equals("B")) {
            //2T7T答案相同
            String a = list.get(1);
            String b = list.get(6);
            boolean flag = a.equals(b);
            return flag;
        }
        if (str.equals("C")) {
            //1T9T答案相同
            String a = list.get(0);
            String b = list.get(8);
            boolean flag = a.equals(b);
            return flag;
        }
        if (str.equals("D")) {
            //6T10T答案相同
            String a = list.get(5);
            String b = list.get(9);
            boolean flag = a.equals(b);
            return flag;
        }
        return false;
    }

    //5T:以下哪个与本题答案相同?(A 8, B 4, C 9, D 7)。既选项与5T答案相同
    public static boolean T5(List<String> list) {
        String str = list.get(4);
        if (str.equals("A")) {
            //5T8T答案相同
            String a = list.get(4);
            String b = list.get(7);
            boolean flag = a.equals(b);
            return flag;
        }
        if (str.equals("B")) {
            //5T4T答案相同
            String a = list.get(3);
            String b = list.get(4);
            boolean flag = a.equals(b);
            return flag;
        }
        if (str.equals("C")) {
            //5T9T答案相同
            String a = list.get(4);
            String b = list.get(8);
            boolean flag = a.equals(b);
            return flag;
        }
        if (str.equals("D")) {
            //5T7T答案相同
            String a = list.get(4);
            String b = list.get(6);
            boolean flag = a.equals(b);
            return flag;
        }
        return false;
    }

    //6T:以下哪两个与8T答案相同?(A 2T4T, B 1T6T, C 3T10T, D 5T9T)。既选项和8T三个选项一样
    public static boolean T6(List<String> list) {
        String str = list.get(5);
        if (str.equals("A")) {
            //2T4T8T答案相同
            String a = list.get(1);
            String b = list.get(3);
            String c = list.get(7);
            boolean flag = (a.equals(b) && a.equals(c) && b.equals(c));
            return flag;
        }
        if (str.equals("B")) {
            //1T6T8T答案相同
            String a = list.get(0);
            String b = list.get(5);
            String c = list.get(7);
            boolean flag = (a.equals(b) && a.equals(c) && b.equals(c));
            return flag;
        }
        if (str.equals("C")) {
            //3T8T10T答案相同
            String a = list.get(2);
            String b = list.get(7);
            String c = list.get(9);
            boolean flag = (a.equals(b) && a.equals(c) && b.equals(c));
            return flag;
        }
        if (str.equals("D")) {
            //5T8T9T答案相同
            String a = list.get(4);
            String b = list.get(7);
            String c = list.get(8);
            boolean flag = (a.equals(b) && a.equals(c) && b.equals(c));
            return flag;
        }
        return false;
    }

    //7T:10道题中最少的选项是什么?(A C, B B, C A, D D)。Collections.frequency(list, String)方法计算list中出现重复的次数
    public static boolean T7(List<String> list) {
        String str = list.get(6);
        int countA = Collections.frequency(list, "A");
        int countB = Collections.frequency(list, "B");
        int countC = Collections.frequency(list, "C");
        int countD = Collections.frequency(list, "D");
        List<Integer> arrayList = new ArrayList<Integer>();
        arrayList.add(countA);
        arrayList.add(countB);
        arrayList.add(countC);
        arrayList.add(countD);
        int a = Collections.min(arrayList);
        if (str.equals("A")) {
            boolean flag = (a == countC);
            return flag;
        }
        if (str.equals("B")) {
            boolean flag = (a == countB);
            return flag;
        }
        if (str.equals("C")) {
            boolean flag = (a == countA);
            return flag;
        }
        if (str.equals("D")) {
            boolean flag = (a == countD);
            return flag;
        }
        return false;
    }

    //8T:以下哪个与1T答案不相邻?(A 7, B 5, C 2, D 10)。既AC与BD与AD(Math.abs()取绝对值,indexOf是取下表索引)
    public static boolean T8(List<String> list) {
        String[] numArray = new String[]{"A", "B", "C", "D"};
        List<String> arrayList = Arrays.asList(numArray);
        String str = list.get(7);
        String STR = list.get(0);
        //两道题答案索引之差绝对值大于1
        if (str.equals("A")) {
            String asd = list.get(6);
            boolean flag = (Math.abs(arrayList.indexOf(STR) - arrayList.indexOf(asd)) > 1);
            return flag;
        }
        if (str.equals("B")) {
            String asd = list.get(4);
            boolean flag = (Math.abs(arrayList.indexOf(STR) - arrayList.indexOf(asd)) > 1);
            return flag;
        }
        if (str.equals("C")) {
            String asd = list.get(1);
            boolean flag = (Math.abs(arrayList.indexOf(STR) - arrayList.indexOf(asd)) > 1);
            return flag;
        }
        if (str.equals("D")) {
            String asd = list.get(9);
            boolean flag = (Math.abs(arrayList.indexOf(STR) - arrayList.indexOf(asd)) > 1);
            return flag;
        }
        return false;
    }

    //9T:“1T6T答案相同”与“XT5T答案相同”真假性相反,X=?(A 6, B 10,  C 2, D 9)。既  1T=6T&&XT!=5T 或  1T!=6T&&XT=5T
    public static boolean T9(List<String> list) {
        String str = list.get(8);
        String asd = list.get(0);
        String ASD = list.get(5);
        boolean flag = asd.equals(ASD);
        //flag为真,XT与5T没关系;flag为假,XT=5T
        if (str.equals("A")) {
            if (!flag) {
                String a = list.get(4);
                String b = list.get(5);
                boolean ToF = a.equals(b);
                return ToF;
            }
        }
        if (str.equals("B")) {
            if (!flag) {
                String a = list.get(4);
                String b = list.get(9);
                boolean ToF = a.equals(b);
                return ToF;
            }
        }
        if (str.equals("C")) {
            if (!flag) {
                String a = list.get(1);
                String b = list.get(4);
                boolean ToF = a.equals(b);
                return ToF;
            }
        }
        if (str.equals("D")) {
            if (!flag) {
                String a = list.get(4);
                String b = list.get(8);
                boolean ToF = a.equals(b);
                return ToF;
            }
        }
        return false;
    }

    //10T:答案中ABCD出现次数最多与最少之差?(A 3, B 2, C 4, D 1)。
    public static boolean T10(List<String> list) {
        String str = list.get(9);
        int countA = Collections.frequency(list, "A");
        int countB = Collections.frequency(list, "B");
        int countC = Collections.frequency(list, "C");
        int countD = Collections.frequency(list, "D");
        List<Integer> arrayList = new ArrayList<Integer>();
        arrayList.add(countA);
        arrayList.add(countB);
        arrayList.add(countC);
        arrayList.add(countD);
        int a = Collections.min(arrayList);
        int b = Collections.max(arrayList);
        if (str.equals("A")) {
            boolean flag = (b - a == 3);
            return flag;
        }
        if (str.equals("B")) {
            boolean flag = (b - a == 2);
            return flag;
        }
        if (str.equals("C")) {
            boolean flag = (b - a == 4);
            return flag;
        }
        if (str.equals("D")) {
            boolean flag = (b - a == 1);
            return flag;
        }
        return false;
    }


    public static void main(String[] args) {
        //ABCD
        String[] numArray = new String[]{"A", "B", "C", "D"};
        //一个特特特特特特别特别大的循环
        String[] initArray = new String[10];
        List<String> selectList = Arrays.asList(initArray);
        for (String q : numArray) {
            selectList.set(0, q);
            for (String w : numArray) {
                selectList.set(1, w);
                for (String e : numArray) {
                    selectList.set(2, e);
                    for (String a : numArray) {
                        selectList.set(3, a);
                        for (String s : numArray) {
                            selectList.set(4, s);
                            for (String d : numArray) {
                                selectList.set(5, d);
                                for (String z : numArray) {
                                    selectList.set(6, z);
                                    for (String x : numArray) {
                                        selectList.set(7, x);
                                        for (String c : numArray) {
                                            selectList.set(8, c);
                                            for (String v : numArray) {
                                                selectList.set(9, v);
                                                boolean result = bln(selectList);
                                                if (result == true) {
                                                    System.out.println("2018刑侦科测试题答案为:" + selectList.toString());
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}




答案:B, C, A, C, A, C, D, A, B, A

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据题意,我们可以使用逻辑推理的方法来解决这个问题。 首先,根据条件3,我们可以排除A和D同时作案的可能性。因此,我们可以将A和D分为两组,分别考虑他们是否参与作案。 如果A参与作案,那么根据条件1,B也必须参与作案。此时,根据条件2,我们得出E和F中必须有两人参与作案。根据条件4,C与本案无关,因此排除C参与作案的可能性。根据条件5,D中有且仅有一人作案,因此排除D参与作案的可能性。综上所述,作案人为A和B。 如果D参与作案,那么根据条件5,E必须参与作案。此时,根据条件2,我们得出F必须参与作案。根据条件4,C与本案无关,因此排除C参与作案的可能性。根据条件1,A和B至少有一人参与作案,因此我们得出A也参与作案。综上所述,作案人为A、D和E。 综上所述,作案人有两种情况:A和B,或者A、D和E。下面是一个简单的Python程序,用于找出作案人: ```python suspects = ['A', 'B', 'C', 'D', 'E', 'F'] # 逐个检查可能的作案组合 for combo in [('A', 'B'), ('A', 'D', 'E')]: is_suspect = True for s in suspects: if 'A' in combo and 'B' not in combo and s == 'B': is_suspect = False break if 'A' in combo and 'D' not in combo and s == 'D': is_suspect = False break if 'D' in combo and 'E' not in combo and s == 'E': is_suspect = False break if 'C' in combo and s != 'C': is_suspect = False break if 'D' in combo and s == 'D': if sum([1 for c in combo if c != 'D' and c in suspects and c != 'E']) != 1: is_suspect = False break if 'E' in combo and s == 'E': if 'D' not in combo: is_suspect = False break if 'F' in combo and s != 'F': if sum([1 for c in ('A', 'E') if c in combo]) < 2: is_suspect = False break if is_suspect: print('作案人为:', combo) ``` 输出结果为: ``` 作案人为: ('A', 'B') 作案人为: ('A', 'D', 'E') ``` 因此,作案人为A和B,或者A、D和E。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值