欢迎访问wabc.cc — 源码交易 · 软件定制 · 建站服务一站式平台
全部分类
首页 - 首页 - 解决方案 - 推荐文章 - 看程序员是如何做 “2018年刑侦科推理试题” 的

看程序员是如何做 “2018年刑侦科推理试题” 的

分类:推荐文章 · 发布:2025-12-20 · 浏览:1

hello

各位小伙伴

最近过的怎么样

有没有按时吃饭,睡觉,敲代码

一定要照顾好自己呀~





不知道大家前段时间,有没有在朋友圈中收到一份,『2018的刑侦科目推理试题』娜娜偶然在朋友圈中看到过一次~



原图奉上,没有看过的小伙伴可以仔细的看一下哈~



我看到第一题的反应是

题呢?你到给我题呀~连题都不给我~我怎么知道答案~

看到第二题我的脑袋已经无法思考一片空白了~

这尼玛是什么玩意儿,简直就是一个坑啊,然后我就放弃了。



但是最近我看到各路大神对这道题进行了解答,我才意识到,原来看似这么不正经的题其实是有很正经的答案的~


娜娜~不禁想问,这的死多少脑细胞才能做出这样的推理题~看来我那900+多集的柯南是白看了~



python语言实现






运行结果:




c++语言实现




C语言实现:




一上来就是两发,下面代码是精简后的代码。




Java语言实现



                                                   for (int i = 0 ; i < 10; i++){
                                                       System.out.println((i+1) + ":" + questions[i]);
                                                   }
                                               }
                                           }
                                       }
                                   }
                               }
                           }
                       }
                   }
               }
           }
       }
   }
   /**
    * 判断每个答案是否符合题意
    * 为了方便 questions 数组中从 0 开始,
    * 题目比数组角标多 1(不要问为什么, 奏是这么开)
    * 比如 question[0] 的值表示第 1 题答案
    **/
   static boolean isEnd(int[] questions){
       // 第二题, 第 5 题的答案是
       switch (questions[4]){
           case 1:
               // 如果第 5 题答案是 A, 判断第 2 题答案是不是 C 不是返回 false, 是继续
               if(questions[1] != 3)
                   return false;
               break;
           case 2:
               // 原理同上
               if(questions[1] != 4)
                   return false;
               break;
           case 3:
               // 原理同上
               if(questions[1] != 1)
                   return false;
               break;
           case 4:
               // 原理同上
               if(questions[1] != 2)
                   return false;
               break;
       }
       // 第 3 题, 以下选项中哪一题的答案与其他三项不同
       switch (questions[2]){
           case 1:
               if(!(questions[2]!=questions[5] && questions[5]==questions[1] && questions[1] == 


questions[3]))
                   return false;
               break;
           case 2:
               if(!(questions[5]!=questions[2] && questions[2]==questions[1] && questions[1] ==


questions[3]))
                   return false;
               break;
           case 3:
               if(!(questions[1]!=questions[5] && questions[2]==questions[5] && questions[5] == 


questions[3]))
                   return false;
               break;
           case 4:
               if(!(questions[3]!=questions[5] && questions[5]==questions[1] && questions[1] == 


questions[2]))
                   return false;
               break;
       }
       // 第 4 题, 以下选项中那两题的答案相同
       switch (questions[3]){
           case 1:{
               // 判断第 1 题与第 5 题答案是否相同
               if (questions[0] != questions[4]){
                   return  false;
               }
               break;
           }
           case 2:{
               // 原理同上
               if (questions[1] != questions[6]){
                   return  false;
               }
               break;
           }
           case 3:{
               // 原理同上
               if (questions[0] != questions[8]){
                   return  false;
               }
               break;
           }
           case 4:{
               // 原理同上
               if (questions[5] != questions[9]){
                   return  false;
               }
               break;
           }
       }
       // 第 5 题, 以下选项中哪一题的答案与本题相同
       switch (questions[4]){
           case 1:
               // 判断第 8 题答案是否是 A
               if (questions[7] != 1)
                   return  false;
               break;
           case 2:
               // 原理同上
               if(questions[3] != 2)
                   return  false;
               break;
           case 3:
               // 原理同上
               if (questions[8] != 3)
                   return false;
           case 4:
               // 原理同上
               if (questions[6] != 4)
                   return  false;
               break;
       }
       // 第 6 题, 以下选项中哪两题的答案与第 8 题相同
       switch (questions[5]){
           case 1:
               // 判断第 14 题答案是否与第 8 题答案相同
               if(questions[1] != questions[7] || questions[4] != questions[7])
                   return  false;
               break;
           case 2:
               // 原理同上
               if(questions[0] != questions[7] || questions[5] != questions[7])
                   return  false;
               break;
           case 3:
               // 原理同上
               if(questions[2] != questions[7] || questions[9] != questions[7])
                   return  false;
               break;
           case 4:
               // 原理同上
               if(questions[4] != questions[7] || questions[8] != questions[7])
                   return  false;
               break;
       }
       // 由于第 710 题问题是同类型的, 所以一块计算 start
       int[] check10 = new int[5];
       // 把每个题的答案 (1234) 作为新数组下表, value++ 计算出现次数
       for (int i=0;i < questions.length;i++){
           check10[questions[i]]++;
       }
       // 出现最少与最多选项的次数初始化为 A 的次数
       int low = check10[1];
       int longer = check10[1];
       // 出现最少的选项, 初始化为 A
       int lowA = 1;
       // 最少与最多次数的选项相关计算
       for (int i=1;i<5;i++) {
           if(check10[i] >0 && check10[i] < low){
               low = check10[i];
               lowA = i;
           }
           if (check10[i] > longer){
               longer = check10[i];
           }
       }
       // 第 7 题, 在此十道题中, 被选中次数最少的选项字母为
       switch (questions[6]){
           case 1:
               // 判断才出现最少的字母是否为 C
               if (lowA != 3)
                   return  false;
               break;
           case 2:
               // 原理同上
               if (lowA != 2)
                   return  false;
               break;
           case 3:
               // 原理同上
               if (lowA != 1)
                   return  false;
               break;
           case 4:
               // 原理同上
               if (lowA != 4)
                   return  false;
               break;
       }
       // 第 10 题, 在此 10 道题中, ABCD 四个字母出现次数最多与最少者的差为
       // 最多次数与最少次数的差值
       int t = longer-low;
       switch (questions[9]){
           case 1:
               // 判断差值是否为 3
               if (t != 3)
                   return  false;
               break;
           case 2:
               // 原理同上
               if (t != 2)
                   return  false;
               break;
           case 3:
               // 原理同上
               if (t != 4)
                   return  false;
               break;
           case 4:
               // 原理同上
               if (t != 1)
                   return  false;
               break;
       }
       // 第 710 题校验 end
       // 第 8 题, 以下选项中哪一题的答案与第 1 题的答案在字母中不相邻
       switch (questions[7]) {
           case 1:
               // 判断第 7 题与第一题答案差值绝对是是否为 1
               if (Math.abs(questions[6] - questions[0]) == 1)
                   return false;
               break;
           case 2:
               // 原理同上
               if (Math.abs(questions[4] - questions[0]) == 1)
                   return false;
               break;
           case 3:
               // 原理同上
               if (Math.abs(questions[1] - questions[0]) == 1)
                   return false;
               break;
           case 4:
               // 原理同上
               if (Math.abs(questions[9] - questions[0]) == 1)
                   return false;
               break;
       }
       // 第 9 题, 已知第 1 题与第 6 题的答案相同与第 X 题与第 5 题的答案相同的真假性相反, 那么 X 为
       // 判断第 1 题与第 6 题的答案是否相同
       boolean isOne = questions[0]==questions[5]?true:false;
       switch (questions[8]){
           case 1:
               if(isOne){
                   // 第 1 题与第 6 题相同, 第 6 题与第 5 题答案相同返回 false;
                   if (questions[5] == questions[4])
                       return false;
               }else {
                   // 第 1 题与第 6 题不相同, 第 6 题与第 5 题答案不相同返回 false;
                   if (questions[5] != questions[4])
                       return false;
               }
               break;
           case 2:
               // 原理同上
               if(isOne){
                   if (questions[9] == questions[4])
                       return false;
               }else {
                   if (questions[9] != questions[4])
                       return false;
               }
               break;
           case 3:
               // 原理同上
               if(isOne){
                   if (questions[1] == questions[4])
                       return false;
               }else {
                   if (questions[1] != questions[4])
                       return false;
               }
               break;
           case 4:
               // 原理同上
               if(isOne){
                   if (questions[8] == questions[4])
                       return false;
               }else {
                   if (questions[8] != questions[4])
                       return false;
               }
               break;
       }
       return true;
   }
   public static void main(String[] args) {
       answer();
   }




看到上面的答案之后,娜娜躲在角落了瑟瑟发抖,大牛,不就是膝盖吗?我给还不行吗?


然后我看到了下面这条信息,这一是道杭州学军中学的推理社的招新题~招新题~



然后娜娜开始研究怎么把这道题解出来~



此时此刻娜娜

娜娜的心情就和外面的天气一样

当我以为这题没有答案的时候

有人做出了答案

当我以为做答案的都是大牛的时候

有人说这是入门级的题

当我想着别人能做我也能做到的时候

发现自己竟然做不出来




各位小伙伴

开往幼儿园的班车就要发车了

没做出来的小伙伴请上车

和娜娜一起回去学习


不要担心

我一定会回来的~~~


上一篇:共享纸巾机软件开发源码
下一篇:手机微信H5游戏软件开发,微信小程序游戏制作定制

相关文章

源码分类

热门源码

最新资讯

联系我们