黑马程序员技术交流社区

标题: JAVA解决学军中学推理社2017届招新试题 [打印本页]

作者: as604049322    时间: 2015-1-24 16:28
标题: JAVA解决学军中学推理社2017届招新试题
本帖最后由 as604049322 于 2015-1-24 16:48 编辑

题目:1.这道题的答案是
A.A B.B C.C D.D
2.第5题的答案是
A.C B.D C.A D.B
3.以下选项中哪一题的答案与其他三项不同
A.第3题 B.第6题 C.第2题 D.第4题
4.以下选项中哪两题的答案相同
A.第1,5题 B.第2,7题 C.第1,9题 D.第6,10题
5.以下选项中哪一题的答案与本题相同
A.第8题 B.第4题 C.第9题 D.第7题
6.以下选项中哪两题的答案与第8题相同
A.第2,4题 B.第1,6题 C.第3,10题 D.第5,9题
7.在此十道题中,被选择次数最少的选项字母为
A.C B.B C.A D.D
8.以下选项中哪一题的答案与第1题的答案在字母表中不相邻
A.第7题 B.第5题 C.第2题 D.第10题
9.已知“第1题与第6题的答案相同”与“第X题与第5题的答案相同”的真假性相反,那么X为
A.第6题 B.第10题 C.第2题 D.第9题
10.在此十道题中,ABCD四个字母中出现的次数最多者与最少者的差为
A.3 B.2 C.4 D.1
本试题的答案为______________ 。


推理过程:
从第三题着手:
第一步:若第3题答案为A,则2、4、6答案相同且答案不为A;
第二步:① 假设2、4、6为B,则推2得5为D,推4得7为B,推5得7为D,推到这里就不成立了,所以2、4、6为B不成立;
② 假设2、4、6为C,则推2得5为A,推5得8为A,推6得10为A

推到这里,这几道题都还是成立的,暂定为:2、4、6为C,3、5、8、10为A,剩下1、7、9答案待定,
③ 推10,可以知道最多的答案A与最少的,应该为B或D的差距为3,所以,B、D最少出现1次;
④ 从上面B、D最少出现1次的情况来看,第1题的答案不可能为A,所以暂时有三种假设;
第三步:① 假设1为B,则推9得X为10得到9答案为B,那么剩下7答案为D,倒回去这个推理路线的所有答案都成立,因为可以得出一个正确答案:1、9为B,2、4、6为C,3、5、8、10为A,7为D 排列出来:BCACACDABA。


代码实现:(由于1万字节限制,只发了一半的代码,全部代码将发在2楼)
  1. [/font]
  2. [font=Arial, SimSun]
  3. [/font]
  4. [font=Arial, SimSun]public class Question[/font]
  5. [font=Arial, SimSun]{[/font]
  6. [font=Arial, SimSun]    public static void main(String[] args) [/font]
  7. [font=Arial, SimSun]    {[/font]
  8. [font=Arial, SimSun]        long start=System.currentTimeMillis();[/font]
  9. [font=Arial, SimSun]        String[] sheet={"A","B","C","D"};[/font]
  10. [font=Arial, SimSun]        char[] qus;[/font]
  11. [font=Arial, SimSun]        String quStr="";[/font]
  12. [font=Arial, SimSun]        int num;[/font]
  13. [font=Arial, SimSun]        int count=0;[/font]
  14. [font=Arial, SimSun]        long stop;[/font]
  15. [font=Arial, SimSun]        for(int i=0;i<(int)Math.pow(4,11);i++) {[/font]
  16. [font=Arial, SimSun]            quStr="";[/font]
  17. [font=Arial, SimSun]            num=i;[/font]
  18. [font=Arial, SimSun]            while(num!=0){[/font]
  19. [font=Arial, SimSun]                quStr=sheet[num&3]+quStr;[/font]
  20. [font=Arial, SimSun]                num=num>>>2;[/font]
  21. [font=Arial, SimSun]            }[/font]
  22. [font=Arial, SimSun]            while(quStr.length()!=10)[/font]
  23. [font=Arial, SimSun]                quStr="A"+quStr;[/font]
  24. [font=Arial, SimSun]
  25. [/font]
  26. [font=Arial, SimSun]            quStr=" "+quStr;[/font]
  27. [font=Arial, SimSun]            qus=quStr.toCharArray();[/font]
  28. [font=Arial, SimSun]            if(qus2(qus)&&qus3(qus)&&qus4(qus)&&qus5(qus)&&qus6(qus)&&qus7(qus)&&qus8(qus)&&qus9(qus)&&qus10(qus)){[/font]
  29. [font=Arial, SimSun]                System.out.println(quStr.substring(1,quStr.length()));[/font]
  30. [font=Arial, SimSun]                stop=System.currentTimeMillis();[/font]
  31. [font=Arial, SimSun]                System.out.println("第"+(++count)+"次取得结果耗时"+(stop-start)+"豪秒");[/font]
  32. [font=Arial, SimSun]            }[/font]
  33. [font=Arial, SimSun]        }[/font]
  34. [font=Arial, SimSun]        stop=System.currentTimeMillis();[/font]
  35. [font=Arial, SimSun]        System.out.println("运行完毕。总耗时:"+(stop-start)/1000+"秒");[/font]
  36. [font=Arial, SimSun]
  37. [/font]
  38. [font=Arial, SimSun]    }[/font]
  39. [font=Arial, SimSun]    public static boolean qus2(char[] qus){[/font]
  40. [font=Arial, SimSun]        if(qus[5]=='A'&&qus[2]=='C')[/font]
  41. [font=Arial, SimSun]            return true;[/font]
  42. [font=Arial, SimSun]        if(qus[5]=='B'&&qus[2]=='D')[/font]
  43. [font=Arial, SimSun]            return true;[/font]
  44. [font=Arial, SimSun]        if(qus[5]=='C'&&qus[2]=='A')[/font]
  45. [font=Arial, SimSun]            return true;[/font]
  46. [font=Arial, SimSun]        if(qus[5]=='D'&&qus[2]=='B')[/font]
  47. [font=Arial, SimSun]            return true;[/font]
  48. [font=Arial, SimSun]        return false;[/font]
  49. [font=Arial, SimSun]    }[/font]
  50. [font=Arial, SimSun]    public static boolean qus3(char[] qus){[/font]
  51. [font=Arial, SimSun]        if(qus[3]=='A'&&qus[6]==qus[2]&&qus[2]==qus[4]&&qus[6]!='A')[/font]
  52. [font=Arial, SimSun]            return true;[/font]
  53. [font=Arial, SimSun]        if(qus[3]=='B'&&qus[2]=='B'&&qus[4]=='B'&&qus[6]!='B')[/font]
  54. [font=Arial, SimSun]            return true;[/font]
  55. [font=Arial, SimSun]        if(qus[3]=='C'&&qus[6]=='C'&&qus[4]=='C'&&qus[2]!='C')[/font]
  56. [font=Arial, SimSun]            return true;[/font]
  57. [font=Arial, SimSun]        if(qus[3]=='D'&&qus[6]=='D'&&qus[2]=='D'&&qus[4]!='D')[/font]
  58. [font=Arial, SimSun]            return true;[/font]
  59. [font=Arial, SimSun]        return false;[/font]
  60. [font=Arial, SimSun]    }[/font]


  61. [font=Arial, SimSun]    public static boolean qus10(char[] qus){[/font]
  62. [font=Arial, SimSun]        int[] q=new int[4];[/font]
  63. [font=Arial, SimSun]        int max=0,min=10;[/font]
  64. [font=Arial, SimSun]        for(char c:qus){[/font]
  65. [font=Arial, SimSun]            if (c=='A')[/font]
  66. [font=Arial, SimSun]                q[0]++;[/font]
  67. [font=Arial, SimSun]            if (c=='B')[/font]
  68. [font=Arial, SimSun]                q[1]++;[/font]
  69. [font=Arial, SimSun]            if (c=='C')[/font]
  70. [font=Arial, SimSun]                q[2]++;[/font]
  71. [font=Arial, SimSun]            if (c=='D')[/font]
  72. [font=Arial, SimSun]                q[3]++;[/font]
  73. [font=Arial, SimSun]        }[/font]
  74. [font=Arial, SimSun]        for(int num:q){[/font]
  75. [font=Arial, SimSun]            if(min>num)[/font]
  76. [font=Arial, SimSun]                min=num;[/font]
  77. [font=Arial, SimSun]            if(max<num)[/font]
  78. [font=Arial, SimSun]                max=num;[/font]
  79. [font=Arial, SimSun]        }[/font]
  80. [font=Arial, SimSun]        if(qus[10]=='A'&&max-min==3)[/font]
  81. [font=Arial, SimSun]            return true;[/font]
  82. [font=Arial, SimSun]        if(qus[10]=='B'&&max-min==2)[/font]
  83. [font=Arial, SimSun]            return true;[/font]
  84. [font=Arial, SimSun]        if(qus[10]=='C'&&max-min==4)[/font]
  85. [font=Arial, SimSun]            return true;[/font]
  86. [font=Arial, SimSun]        if(qus[10]=='D'&&max-min==1)[/font]
  87. [font=Arial, SimSun]            return true;[/font]
  88. [font=Arial, SimSun]        return false;[/font]
  89. [font=Arial, SimSun]    }[/font]
  90. [font=Arial, SimSun]}[/font]
  91. [font=Arial, SimSun]
复制代码



运行结果:
BCACACDABA第1次取得结果耗时500豪秒

一个小时过去了,电脑也未能遍历出第二次结果


估计所以答案遍历完,5个小时也弄不出来,所以果断直接关了


作者: as604049322    时间: 2015-1-24 16:30

  1. public class Question
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         long start=System.currentTimeMillis();
  6.         String[] sheet={"A","B","C","D"};
  7.         char[] qus;
  8.         String quStr="";
  9.         int num;
  10.         int count=0;
  11.         long stop;
  12.         for(int i=0;i<(int)Math.pow(4,11);i++) {
  13.             quStr="";
  14.             num=i;
  15.             while(num!=0){
  16.                 quStr=sheet[num&3]+quStr;
  17.                 num=num>>>2;
  18.             }
  19.             while(quStr.length()!=10)
  20.                 quStr="A"+quStr;

  21.             quStr=" "+quStr;
  22.             qus=quStr.toCharArray();
  23.             if(qus2(qus)&&qus3(qus)&&qus4(qus)&&qus5(qus)&&qus6(qus)&&qus7(qus)&&qus8(qus)&&qus9(qus)&&qus10(qus)){
  24.                 System.out.println(quStr.substring(1,quStr.length()));
  25.                 stop=System.currentTimeMillis();
  26.                 System.out.println("第"+(++count)+"次取得结果耗时"+(stop-start)+"豪秒");
  27.             }
  28.         }
  29.         stop=System.currentTimeMillis();
  30.         System.out.println("运行完毕。总耗时:"+(stop-start)/1000+"秒");

  31.     }
  32.     public static boolean qus2(char[] qus){
  33.         if(qus[5]=='A'&&qus[2]=='C')
  34.             return true;
  35.         if(qus[5]=='B'&&qus[2]=='D')
  36.             return true;
  37.         if(qus[5]=='C'&&qus[2]=='A')
  38.             return true;
  39.         if(qus[5]=='D'&&qus[2]=='B')
  40.             return true;
  41.         return false;
  42.     }
  43.     public static boolean qus3(char[] qus){
  44.         if(qus[3]=='A'&&qus[6]==qus[2]&&qus[2]==qus[4]&&qus[6]!='A')
  45.             return true;
  46.         if(qus[3]=='B'&&qus[2]=='B'&&qus[4]=='B'&&qus[6]!='B')
  47.             return true;
  48.         if(qus[3]=='C'&&qus[6]=='C'&&qus[4]=='C'&&qus[2]!='C')
  49.             return true;
  50.         if(qus[3]=='D'&&qus[6]=='D'&&qus[2]=='D'&&qus[4]!='D')
  51.             return true;
  52.         return false;
  53.     }
  54.     public static boolean qus4(char[] qus){
  55.         if(qus[4]=='A'&&qus[1]==qus[5])
  56.             return true;
  57.         if(qus[4]=='B'&&qus[2]==qus[7])
  58.             return true;
  59.         if(qus[4]=='C'&&qus[1]==qus[9])
  60.             return true;
  61.         if(qus[4]=='D'&&qus[6]==qus[10])
  62.             return true;
  63.         return false;
  64.     }
  65.     public static boolean qus5(char[] qus){
  66.         if(qus[5]=='A'&&qus[8]=='A')
  67.             return true;
  68.         if(qus[5]=='B'&&qus[4]=='B')
  69.             return true;
  70.         if(qus[5]=='C'&&qus[9]=='C')
  71.             return true;
  72.         if(qus[5]=='D'&&qus[7]=='D')
  73.             return true;
  74.         return false;
  75.     }
  76.     public static boolean qus6(char[] qus){
  77.         if(qus[6]=='A'&&qus[2]==qus[4]&&qus[4]==qus[8])
  78.             return true;
  79.         if(qus[6]=='B'&&qus[1]==qus[6]&&qus[6]==qus[8])
  80.             return true;
  81.         if(qus[6]=='C'&&qus[3]==qus[10]&&qus[10]==qus[8])
  82.             return true;
  83.         if(qus[6]=='D'&&qus[5]==qus[9]&&qus[9]==qus[8])
  84.             return true;
  85.         return false;
  86.     }
  87.     public static boolean qus7(char[] qus){
  88.         int[] q=new int[4];
  89.         int min=0;
  90.         char[] sheet={'A','B','C','D'};
  91.         for(char c:qus){
  92.             for(int i=0;i<sheet.length;i++)
  93.                 if(c==sheet[i])
  94.                     q[i]++;
  95.         }
  96.         for(int i=0;i<q.length;i++){
  97.             if(q[min]>q[i])
  98.                 min=i;
  99.         }
  100.         if(qus[7]=='A'&&sheet[min]=='C')
  101.             return true;
  102.         if(qus[7]=='B'&&sheet[min]=='B')
  103.             return true;
  104.         if(qus[7]=='C'&&sheet[min]=='A')
  105.             return true;
  106.         if(qus[7]=='D'&&sheet[min]=='D')
  107.             return true;
  108.         return false;
  109.     }
  110.     public static boolean qus8(char[] qus){
  111.         if(qus[1]=='A'&&(qus[7]=='C'||qus[7]=='D'))
  112.             return true;
  113.         if(qus[1]=='B'&&qus[7]=='D')
  114.             return true;
  115.         if(qus[1]=='C'&&qus[7]=='A')
  116.             return true;
  117.         if(qus[1]=='D'&&(qus[7]=='A'||qus[7]=='B'))
  118.             return true;
  119.         return false;
  120.     }
  121.     public static boolean qus9(char[] qus){
  122.         if(qus[9]=='A'&&(qus[1]==qus[6]^qus[6]==qus[5]))
  123.                 return true;
  124.         if(qus[9]=='B'&&(qus[1]==qus[6]^qus[10]==qus[5]))
  125.                 return true;
  126.         if(qus[9]=='C'&&(qus[1]==qus[6]^qus[2]==qus[5]))
  127.                 return true;
  128.         if(qus[9]=='D'&&(qus[1]==qus[6]^qus[9]==qus[5]))
  129.                 return true;
  130.         return false;
  131.     }
  132.     public static boolean qus10(char[] qus){
  133.         int[] q=new int[4];
  134.         int max=0,min=10;
  135.         for(char c:qus){
  136.             if (c=='A')
  137.                 q[0]++;
  138.             if (c=='B')
  139.                 q[1]++;
  140.             if (c=='C')
  141.                 q[2]++;
  142.             if (c=='D')
  143.                 q[3]++;
  144.         }
  145.         for(int num:q){
  146.             if(min>num)
  147.                 min=num;
  148.             if(max<num)
  149.                 max=num;
  150.         }
  151.         if(qus[10]=='A'&&max-min==3)
  152.             return true;
  153.         if(qus[10]=='B'&&max-min==2)
  154.             return true;
  155.         if(qus[10]=='C'&&max-min==4)
  156.             return true;
  157.         if(qus[10]=='D'&&max-min==1)
  158.             return true;
  159.         return false;
  160.     }
  161. }
复制代码

作者: 小小志    时间: 2015-1-25 16:07
我很想问问你 你现在在黑马吗 大神??
作者: 邓士林    时间: 2015-1-25 21:50
暴力判断,效率肯定很低的。算法不太好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2