黑马程序员技术交流社区

标题: 一道微软的面试题 [打印本页]

作者: kimi    时间: 2013-5-29 20:46
标题: 一道微软的面试题
本帖最后由 kimi 于 2013-5-31 01:09 编辑

请回答下面10个问题:
1、第一个答案是b的问题是哪一个?

(a)2;(b) 3;(c)4;(d)5;(e)6

2、唯一的连续两个具有相同答案的问题是:

(a)2,3;(b)3,4;(c)4,5;(d)5,6;(e)6,7;

3、本问题答案和哪一个问题的答案相同?

(a)1;(b)2;(c)4;(d)7;(e)6

4、答案是a的问题的个数是:

(a)0;(b)1;(c)2;(d)3;(e)4

5、本问题答案和哪一个问题的答案相同?

(a)10;(b)9;(c)8;(d)7;(e)6

6、答案是a的问题的个数和答案是什么的问题的个数相同?

(a)b;(b)c;(c)d;(d)e;(e)以上都不是

7、按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?

(a)4;(b)3;(c)2;(d)1;(e)0。

8、答案是元音字母的问题的个数是:

(a)2;(b)3;(c)4;(d)5;(e)6。

9、答案是辅音字母的问题的个数是:

(a)一个质数;(b)一个阶乘数;(c)一个平方数;(d)一个立方数,(e)5的倍数

10、本问题的答案是:

(a)a;(b)b;(c)c;(d)d;(e)e

研究了半天,哪位大神研究好了交流一下啊
作者: 逸盏清茶    时间: 2013-5-30 00:10
沙发!等楼下回答
作者: 张俊迪    时间: 2013-5-30 01:47
这么犀利的题,用力一个多小时,应该是
1c,2d,3e,4b,5e,6e,7d,8c,9b,10a.
上来先判断第三个可以退出只能选d和e但是当为d时候上下推一下不成立,具体的忘了,可是当时推的时候记下了顺序,1c,2e,3d,4c,5e,6e,7d,8e推到第八个好像就问题,具体的你自己试试,下面用为e推的时候现将前六个退出来,在推下面四个,详细的说不出来了,先从第三个开始判断,我是这样来的
作者: HM张博文    时间: 2013-5-30 08:44
好像题目没有写完全吧?
作者: 李征    时间: 2013-5-30 09:34
这题目出的也太消耗脑细胞了,那第一题来说,首先肯定不是B,因为,B是3.如果是B的话,那么第三题的答案也是B,这就和第一题说第一个是B的是第三题相矛盾了,排除。。恩大概就是这么个思路,然后所有题目一起找一个很微妙的相互关系,如非必要,理解下就行了吧
作者: 孙茜茜    时间: 2013-5-30 09:41
纯逻辑题啊。。。找到入口就好了
作者: First    时间: 2013-5-30 15:09
楼主,就让我来给你一个满意的答案好了,希望楼主能认真看看我的代码--
个人解答:
  1. import java.util.Arrays;
  2. import java.util.TreeMap;

  3. public class MyDemo1 {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) {
  8.                
  9.                 MyAns ma = new MyAns();
  10.                 //System.out.println(ma.ans);
  11.                 //ma.get5(9765624,9);
  12.                 //ma.showAns();
  13.                 ma.show();
  14.         }
  15. }

  16. class MyAns{
  17.        
  18.         int[] ans = new int[10];//答案的数字化数组
  19.         TreeMap<Integer, Integer> tm;//存储每一个答案出现的次数,比如a出现几次,b出现几次
  20.         int[][] ques = {//数字化每一道题目,题目的编号从0开始计算,方便数组遍历。
  21.                                         //同理,答案a,b,c,d,e也从0开始计算。
  22.                                 {1,2,3,4,5},//0
  23.                                 {1,2,3,4,5},//1
  24.                                 {0,1,3,6,5},//2
  25.                                 {0,1,2,3,4},//3
  26.                                 {9,8,7,6,5},//4
  27.                                 {1,2,3,4,5},//5
  28.                                 {4,3,2,1,0},//6
  29.                                 {2,3,4,5,6},//7
  30.                                 {0,1,2,3,4},//8
  31.                                 {0,1,2,3,4}};//9

  32.        
  33.         public void show() {//解决问题的核心部分。
  34.                 System.out.println("start");
  35.                 for(int i=0;i<9765625;i++){//遍历每一种情况的可能性
  36.                         get5(i,9);
  37.                         tm = showMap(ans);
  38.                         //showAns();
  39.                         int num8 = mget(1)+mget(2)+mget(3);
  40.                         if((firB()==ques[0][ans[0]])
  41.                                         &&(sec()==ques[1][ans[1]])
  42.                                         &&(ans[2]==ans[ques[2][ans[2]]])
  43.                                         &&(mget(0)==ques[3][ans[3]])
  44.                                         &&(ans[4]==ans[ques[4][ans[4]]])
  45.                                         &&(isFive(ques[5][ans[5]]))
  46.                                         &&(Math.abs(ans[6]-ans[7])==ques[6][ans[6]])
  47.                                         &&(mget(0)+mget(4)==ques[7][ans[7]])
  48.                                         &&(isEight(num8, ques[8][ans[8]]))
  49.                                         &&(ans[9]==ques[9][ans[9]])){//判断每一种可能性的每一道题目是否符合答案
  50.                                 showAns();//打印出满足所有题目的答案数组
  51.                         }
  52.                        
  53.                 }
  54.                 System.out.println("end");
  55.         }

  56.         public void showAns(){//打印出答案的数组
  57.                 Character[] chs = new Character[10];
  58.                 for(int i =0;i<10;i++){
  59.                         chs[i]=(char)(ans[i]+'a');
  60.                 }
  61.                
  62.                 System.out.println(Arrays.asList(chs).toString());
  63.         }
  64.        
  65.         public TreeMap<Integer, Integer> showMap(int[] ins){//把已知数组装到map中
  66.                                                                         //存储每一个答案出现的次数,比如a出现几次,b出现几次
  67.                 TreeMap<Integer, Integer> tm = new TreeMap<Integer, Integer>();

  68.                 for (int c : ins){
  69.                         Integer value = tm.get(c);
  70.                         if(value == null)
  71.                                 value = 0;
  72.                         value++;
  73.                         tm.put(c, value);
  74.                 }
  75.                
  76.                 return tm;
  77.         }
  78.        
  79.         public void get5(int num,int count){//把十进制转换为五进制,存到int数组中,得到的就是
  80.                                                                                 //每一道题目的答案值(0=a,1=b,2=c,3=d,4=e).
  81.                 int x = num/5;
  82.                 if(x>0){
  83.                         get5(x,count-1);
  84.                 }
  85.                 ans[count] = num%5;
  86.                 //System.out.println(ans[count]);
  87.         }
  88.        
  89.         public int firB(){//第一个答案是b的问题是哪一个
  90.                 for(int i=0;i<10;i++){
  91.                         if(ans[i]==1)
  92.                                 return i;
  93.                 }
  94.                 return -1;
  95.         }
  96.        
  97.         public int sec(){//返回第一个 两个答案相同的 数值
  98.                 int count = 0;
  99.                 int x = -1;
  100.                 for(int i = 0;i<9;i++){
  101.                         if(ans[i]==ans[i+1]){//连续2个问题的答案相同
  102.                                 count++;//确保个数唯一
  103.                                 x = i;}
  104.                 }
  105.                
  106.                 if(!(count==1))//判断唯一的一个
  107.                         return -1;//不唯一的情况
  108.                 else
  109.                         return x;//唯一的情况
  110.         }
  111.        
  112.         public boolean isEight(int num, int in){
  113.                 int[][] num8s = {{2,3,5,7},//一个质数的可能性
  114.                                 {1,2,6},//一个阶数的可能性
  115.                                 {1,4,9},//一个平方数的可能性
  116.                                 {1,8},//一个立方数的可能性
  117.                                 {0,5}}; //5的倍数的可能性。
  118.                
  119.                 int[] ints = num8s[in];
  120.                 for(int i : ints){
  121.                         if(num == i)
  122.                                 return true;
  123.                 }
  124.                 return false;
  125.         }
  126.        
  127.         public boolean isFive(int num){//角标5号的问题,需要分情况判断
  128.                 if(num<5)//答案是前4个的情况
  129.                         return mget(0)==mget(ques[5][ans[5]]);
  130.                 else{//以上都不是的情况
  131.                         for(int i=1; i<5;i++){
  132.                                 if(mget(0)==mget(i))
  133.                                         return false;
  134.                         }
  135.                         return true;
  136.                 }
  137.         }       

  138.         public int mget(Integer i){//封装tm的get()方法 返回值为null的情况,
  139.                                                            //否则,null与数字不能相加,也不能用于 == 的判断。
  140.                 if(tm.get(i)==null)
  141.                         return 0;
  142.                 return tm.get(i);
  143.                
  144.         }
  145. }
复制代码

作者: 张旺达    时间: 2013-5-30 16:29
First 发表于 2013-5-30 15:09
楼主,就让我来给你一个满意的答案好了,希望楼主能认真看看我的代码--
个人解答: ...

{:soso_e136:}碉堡了
作者: 神之梦    时间: 2013-5-30 20:43
First 发表于 2013-5-30 15:09
楼主,就让我来给你一个满意的答案好了,希望楼主能认真看看我的代码--
个人解答: ...

对哥们五体投地
作者: 张勇1993    时间: 2013-5-30 21:15
First 发表于 2013-5-30 15:09
楼主,就让我来给你一个满意的答案好了,希望楼主能认真看看我的代码--
个人解答: ...

牛!!!!!!!!!!!!!!!!!!!
作者: 花心々小土豆    时间: 2013-5-30 22:57
First 发表于 2013-5-30 15:09
楼主,就让我来给你一个满意的答案好了,希望楼主能认真看看我的代码--
个人解答: ...

怎一个刁字了得!!
作者: 李玉江    时间: 2013-5-30 23:16
有些自卑啊我
作者: First    时间: 2013-6-3 18:46
感谢各位的夸奖
相互学习
作者: Union    时间: 2014-4-24 23:50
!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: Union    时间: 2014-4-24 23:52
First 发表于 2013-5-30 15:09
楼主,就让我来给你一个满意的答案好了,希望楼主能认真看看我的代码--
个人解答: ...

太吊了!




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