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

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

作者: 天诺IT技术 | 来源:发表于2018-03-19 17:16 被阅读0次

    hello

    各位小伙伴

    最近过的怎么样

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

    一定要照顾好自己呀~

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

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

    我看到第一题的反应是

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

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

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

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

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

    python语言实现

    运行结果:

    c++语言实现

    C语言实现:

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

    Java语言实现

    for(inti =0; i <10; i++){

    System.out.println((i+1) +":"+ questions[i]);

    }

    }

    }

    }

    }

    }

    }

    }

    }

    }

    }

    }

    }

    /**

    * 判断每个答案是否符合题意

    * 为了方便 questions 数组中从 0 开始,

    * 题目比数组角标多 1(不要问为什么, 奏是这么开)

    * 比如 question[0] 的值表示第 1 题答案

    **/

    staticbooleanisEnd(int[] questions){

    // 第二题, 第 5 题的答案是

    switch(questions[4]){

    case1:

    // 如果第 5 题答案是 A, 判断第 2 题答案是不是 C 不是返回 false, 是继续

    if(questions[1] !=3)

    returnfalse;

    break;

    case2:

    // 原理同上

    if(questions[1] !=4)

    returnfalse;

    break;

    case3:

    // 原理同上

    if(questions[1] !=1)

    returnfalse;

    break;

    case4:

    // 原理同上

    if(questions[1] !=2)

    returnfalse;

    break;

    }

    // 第 3 题, 以下选项中哪一题的答案与其他三项不同

    switch(questions[2]){

    case1:

    if(!(questions[2]!=questions[5] && questions[5]==questions[1] && questions[1] ==

    questions[3]))

    returnfalse;

    break;

    case2:

    if(!(questions[5]!=questions[2] && questions[2]==questions[1] && questions[1] ==

    questions[3]))

    returnfalse;

    break;

    case3:

    if(!(questions[1]!=questions[5] && questions[2]==questions[5] && questions[5] ==

    questions[3]))

    returnfalse;

    break;

    case4:

    if(!(questions[3]!=questions[5] && questions[5]==questions[1] && questions[1] ==

    questions[2]))

    returnfalse;

    break;

    }

    // 第 4 题, 以下选项中那两题的答案相同

    switch(questions[3]){

    case1:{

    // 判断第 1 题与第 5 题答案是否相同

    if(questions[0] != questions[4]){

    returnfalse;

    }

    break;

    }

    case2:{

    // 原理同上

    if(questions[1] != questions[6]){

    returnfalse;

    }

    break;

    }

    case3:{

    // 原理同上

    if(questions[0] != questions[8]){

    returnfalse;

    }

    break;

    }

    case4:{

    // 原理同上

    if(questions[5] != questions[9]){

    returnfalse;

    }

    break;

    }

    }

    // 第 5 题, 以下选项中哪一题的答案与本题相同

    switch(questions[4]){

    case1:

    // 判断第 8 题答案是否是 A

    if(questions[7] !=1)

    returnfalse;

    break;

    case2:

    // 原理同上

    if(questions[3] !=2)

    returnfalse;

    break;

    case3:

    // 原理同上

    if(questions[8] !=3)

    returnfalse;

    case4:

    // 原理同上

    if(questions[6] !=4)

    returnfalse;

    break;

    }

    // 第 6 题, 以下选项中哪两题的答案与第 8 题相同

    switch(questions[5]){

    case1:

    // 判断第 14 题答案是否与第 8 题答案相同

    if(questions[1] != questions[7] || questions[4] != questions[7])

    returnfalse;

    break;

    case2:

    // 原理同上

    if(questions[0] != questions[7] || questions[5] != questions[7])

    returnfalse;

    break;

    case3:

    // 原理同上

    if(questions[2] != questions[7] || questions[9] != questions[7])

    returnfalse;

    break;

    case4:

    // 原理同上

    if(questions[4] != questions[7] || questions[8] != questions[7])

    returnfalse;

    break;

    }

    // 由于第 710 题问题是同类型的, 所以一块计算 start

    int[] check10 =newint[5];

    // 把每个题的答案 (1234) 作为新数组下表, value++ 计算出现次数

    for(inti=0;i < questions.length;i++){

    check10[questions[i]]++;

    }

    // 出现最少与最多选项的次数初始化为 A 的次数

    intlow = check10[1];

    intlonger = check10[1];

    // 出现最少的选项, 初始化为 A

    intlowA =1;

    // 最少与最多次数的选项相关计算

    for(inti=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]){

    case1:

    // 判断才出现最少的字母是否为 C

    if(lowA !=3)

    returnfalse;

    break;

    case2:

    // 原理同上

    if(lowA !=2)

    returnfalse;

    break;

    case3:

    // 原理同上

    if(lowA !=1)

    returnfalse;

    break;

    case4:

    // 原理同上

    if(lowA !=4)

    returnfalse;

    break;

    }

    // 第 10 题, 在此 10 道题中, ABCD 四个字母出现次数最多与最少者的差为

    // 最多次数与最少次数的差值

    intt = longer-low;

    switch(questions[9]){

    case1:

    // 判断差值是否为 3

    if(t !=3)

    returnfalse;

    break;

    case2:

    // 原理同上

    if(t !=2)

    returnfalse;

    break;

    case3:

    // 原理同上

    if(t !=4)

    returnfalse;

    break;

    case4:

    // 原理同上

    if(t !=1)

    returnfalse;

    break;

    }

    // 第 710 题校验 end

    // 第 8 题, 以下选项中哪一题的答案与第 1 题的答案在字母中不相邻

    switch(questions[7]) {

    case1:

    // 判断第 7 题与第一题答案差值绝对是是否为 1

    if(Math.abs(questions[6] - questions[0]) ==1)

    returnfalse;

    break;

    case2:

    // 原理同上

    if(Math.abs(questions[4] - questions[0]) ==1)

    returnfalse;

    break;

    case3:

    // 原理同上

    if(Math.abs(questions[1] - questions[0]) ==1)

    returnfalse;

    break;

    case4:

    // 原理同上

    if(Math.abs(questions[9] - questions[0]) ==1)

    returnfalse;

    break;

    }

    // 第 9 题, 已知第 1 题与第 6 题的答案相同与第 X 题与第 5 题的答案相同的真假性相反, 那么 X 为

    // 判断第 1 题与第 6 题的答案是否相同

    boolean isOne = questions[0]==questions[5]?true:false;

    switch(questions[8]){

    case1:

    if(isOne){

    // 第 1 题与第 6 题相同, 第 6 题与第 5 题答案相同返回 false;

    if(questions[5] == questions[4])

    returnfalse;

    }else{

    // 第 1 题与第 6 题不相同, 第 6 题与第 5 题答案不相同返回 false;

    if(questions[5] != questions[4])

    returnfalse;

    }

    break;

    case2:

    // 原理同上

    if(isOne){

    if(questions[9] == questions[4])

    returnfalse;

    }else{

    if(questions[9] != questions[4])

    returnfalse;

    }

    break;

    case3:

    // 原理同上

    if(isOne){

    if(questions[1] == questions[4])

    returnfalse;

    }else{

    if(questions[1] != questions[4])

    returnfalse;

    }

    break;

    case4:

    // 原理同上

    if(isOne){

    if(questions[8] == questions[4])

    returnfalse;

    }else{

    if(questions[8] != questions[4])

    returnfalse;

    }

    break;

    }

    returntrue;

    }

    publicstaticvoidmain(String[] args){

    answer();

    }

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

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

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

    此时此刻娜娜

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

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

    有人做出了答案

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

    有人说这是入门级的题

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

    发现自己竟然做不出来

    各位小伙伴

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

    没做出来的小伙伴请上车

    和娜娜一起回去学习

    不要担心

    我一定会回来的~~~

    学习Java的同学注意了!!!学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群:253772578,我们一起学Java!

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/dwmpqftx.html