微软面试题–10个问题的逻辑推理题

微软面试题–10个问题的逻辑推理题非常有趣的微软面试题 请回答下面 10 个问题 1 第一个答案是 b 的问题是哪一个 a 2 b 3 c 4 d 5 e 62 唯一的连续两个具有相同答案的问题是 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 64 答案是 a 的问题的个数是 a

非常有趣的微软面试题

/*

(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

*/

 

个人解答:

import java.util.Arrays; import java.util.TreeMap; public class MyDemo1 { / * @param args */ public static void main(String[] args) { MyAns ma = new MyAns(); //System.out.println(ma.ans); //ma.get5(,9); //ma.showAns(); ma.show(); } } class MyAns{ int[] ans = new int[10];//答案的数字化数组 TreeMap 
  
    tm;//存储每一个答案出现的次数,比如a出现几次,b出现几次 int[][] ques = {//数字化每一道题目,题目的编号从0开始计算,方便数组遍历。 //同理,答案a,b,c,d,e也从0开始计算。 {1,2,3,4,5},//0 {1,2,3,4,5},//1 {0,1,3,6,5},//2 {0,1,2,3,4},//3 {9,8,7,6,5},//4 {1,2,3,4,5},//5 {4,3,2,1,0},//6 {2,3,4,5,6},//7 {0,1,2,3,4},//8 {0,1,2,3,4}};//9 public void show() {//解决问题的核心部分。 System.out.println("start"); for(int i=0;i<;i++){//遍历每一种情况的可能性 get5(i,9); tm = showMap(ans); //showAns(); int num8 = mget(1)+mget(2)+mget(3); if((firB()==ques[0][ans[0]]) &&(sec()==ques[1][ans[1]]) &&(ans[2]==ans[ques[2][ans[2]]]) &&(mget(0)==ques[3][ans[3]]) &&(ans[4]==ans[ques[4][ans[4]]]) &&(isFive(ques[5][ans[5]])) &&(Math.abs(ans[6]-ans[7])==ques[6][ans[6]]) &&(mget(0)+mget(4)==ques[7][ans[7]]) &&(isEight(num8, ques[8][ans[8]])) &&(ans[9]==ques[9][ans[9]])){//判断每一种可能性的每一道题目是否符合答案 showAns();//打印出满足所有题目的答案数组 } } System.out.println("end"); } public void showAns(){//打印出答案的数组 Character[] chs = new Character[10]; for(int i =0;i<10;i++){ chs[i]=(char)(ans[i]+'a'); } System.out.println(Arrays.asList(chs).toString()); } public TreeMap 
   
     showMap(int[] ins){//把已知数组装到map中 //存储每一个答案出现的次数,比如a出现几次,b出现几次 TreeMap 
    
      tm = new TreeMap 
     
       (); for (int c : ins){ Integer value = tm.get(c); if(value == null) value = 0; value++; tm.put(c, value); } return tm; } public void get5(int num,int count){//把十进制转换为五进制,存到int数组中,得到的就是 //每一道题目的答案值(0=a,1=b,2=c,3=d,4=e). int x = num/5; if(x>0){ get5(x,count-1); } ans[count] = num%5; //System.out.println(ans[count]); } public int firB(){//第一个答案是b的问题是哪一个 for(int i=0;i<10;i++){ if(ans[i]==1) return i; } return -1; } public int sec(){//返回第一个 两个答案相同的 数值 int count = 0; int x = -1; for(int i = 0;i<9;i++){ if(ans[i]==ans[i+1]){//连续2个问题的答案相同 count++;//确保个数唯一 x = i;} } if(!(count==1))//判断唯一的一个 return -1;//不唯一的情况 else return x;//唯一的情况 } public boolean isEight(int num, int in){ int[][] num8s = { 
      {2,3,5,7},//一个质数的可能性 {1,2,6},//一个阶数的可能性 {1,4,9},//一个平方数的可能性 {1,8},//一个立方数的可能性 {0,5}}; //5的倍数的可能性。 int[] ints = num8s[in]; for(int i : ints){ if(num == i) return true; } return false; } public boolean isFive(int num){//角标5号的问题,需要分情况判断 if(num<5)//答案是前4个的情况 return mget(0)==mget(ques[5][ans[5]]); else{//以上都不是的情况 for(int i=1; i<5;i++){ if(mget(0)==mget(i)) return false; } return true; } } public int mget(Integer i){//封装tm的get()方法 返回值为null的情况, //否则,null与数字不能相加,也不能用于 == 的判断。 if(tm.get(i)==null) return 0; return tm.get(i); } } 
      
     
    
  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/174094.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月27日 上午7:12
下一篇 2026年3月27日 上午7:13


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号