失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 微软面试题--10个问题的逻辑推理题

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

时间:2022-03-03 07:45:24

相关推荐

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

非常有趣的微软面试题:

/*

请回答下面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

*/

个人解答:

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(9765624,9);//ma.showAns();ma.show();}}class MyAns{int[] ans = new int[10];//答案的数字化数组TreeMap<Integer, Integer> 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}};//9public void show() {//解决问题的核心部分。System.out.println("start");for(int i=0;i<9765625;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<Integer, Integer> showMap(int[] ins){//把已知数组装到map中//存储每一个答案出现的次数,比如a出现几次,b出现几次TreeMap<Integer, Integer> tm = new TreeMap<Integer, Integer>();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;//不唯一的情况elsereturn 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);}}

如果觉得《微软面试题--10个问题的逻辑推理题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。