## 加餐丨微软奇葩面试题背后，真正测试的5种能力

每天5分钟，解决一个商业问题。欢迎收听《刘润·5分钟商学院》实战篇。

上周日的加餐里，我给你留了5道面试题，都是我在这么多年的面试与被面试经验中积累下来的，错过的同学可以点击这里文末的链接看一下。今天这篇加餐，我就来给出这5道题的答案以及背后的考点和出发点。

先看第一题：

1） 有三个连续的，大于六的整数，已知其中两个是质数，求证第三个数能被6整除。

我先来说一下这道题该怎么解，然后再说这道题的用意是什么，要考核被试者的什么能力。

三个连续大于6的整数我们都明白，比如7、8、9，或者说11、12、13等等。另外，题中还给了一个条件，叫其中两个是质数。质数我们也明白，就是只能被1和这个数字本身整除的数。问题是，要证明第三个数能被6整除。为什么突然冒出来个6？这个6是怎么来的，就是解这道题的关键。

以往我在面试的时候，通常会给面试者一摞草稿纸，而在面试者抓耳挠腮地算的时候，我们会建议他，把自己的思考过程说出来，一边说一边思考，这样我们就能知道他的思考过程。比如有的面试者可能就会列一堆方程式，什么n，n+1，n+2，然后不断去用方程式来计算它们跟6的关系。那这时候我们就知道，他陷入歧途了。

那这道题的正确解法是什么呢？

你要先把被6整除这个问题，分解成同时能被2整除，也能被3整除，然后你只需要证明第三个数既能被2整除、也能被3整除就可以了。那怎么证明呢？只要你想到了这一步，接下来就会非常简单，甚至接近于常识了。我们知道，任意连续的两个整数中间一定有一个数是2的倍数，也就是能被2整除；同时我们还知道，任意三个整数中间一定有一个数是3的倍数，也就是能被3整除。这也就是说，这连续的3个整数里面，一定有一个数可以被2整除，还有一个数可以被3整除。但是题干告诉我们，题中的三个数，有两个数都是质数，也就是只能被1和这个数本身整除，而这三个数还都大于6，不可能是2或者3。所以，这三个数里能被2整除的数和能被3整除的数，只能是同一个数，也就是这两个质数之外的第三个数。这样，我们就证明了第三个数既能被2整除也能被3整除，也就是能被6整除。

听我说完之后你会发现，这考的就是小学数学的知识，我当年进微软的时候也被问过这道题，那么为什么要考这道题呢？因为这道题能考验一个人"分解问题"的能力，对应到这题，就是把能被6整除这件事情拆解为能被2整除，也能被3整除这两个小问题。这种能力特别重要。

我举个例子。假设你遇到了一个客户，他的电脑突然宕机了，而你远在千里之外只能用电话远程指挥，可电脑宕机的理由有千万种，你怎么办？如果你懂得拆解问题就知道，这种情况无非三种可能：电源没插好、硬件出了问题、软件出了问题。那这时候，你就可以一一来排除问题到底出在哪了。

我再举个例子。如何解决全球变暖问题，如何解决碳排放问题？专家们给出了成千上万的建议，吵得不可开交。但是Bill Gates在一次TED的演讲中，给出了一个解决碳排放问题的"分解公式"：

CO2 = P x S x E x C

P，就是People，人口；S，就是Service Per Person，每个人使用多少项服务，比如开车，壁炉，烧烤等等；E，就是Energy Per Service，每项服务使用多少能源；C，就是CO2 Per Unit Energy，每单位能源，排放多少二氧化碳。

![图片](https://piccdn3.umiwi.com/img/201803/02/201803021736383616825789.jpg)

所以，解决碳排放问题，就是分别解决人口问题（P），环保的生活方式问题（S），能源使用效率问题（E），产生能源的碳排放问题（C）。每个人，每个领域各司其职，共同推进。

你看，把一个如此宏大的问题，"分解"为四个问题，这种能力甚至可以用来拯救世界。所以，面试微软员工时，我们特别在乎候选人分解问题，然后解决问题的能力。这道题只是众多题库中的一项，但目的是考验"分解"。

答案不是最重要的，思维习惯更重要。如果你太轻松地直接说出答案，我会给你换另一道更难的题。

第二题：

2） 有2个骰子,每一个骰子都是6面的正方体,每一面上只能放0到9的数字一个,问这2个骰子如何组合，可以达到显示日历的效果（从01-31）？

这道题的逻辑是这样的。首先，大多数人都会想到，我们有两个立方体，那就一共12个面。现在有0-9，一共10个数，放到这12个面上，所以，一定有数字是重复出现在两个立方体上的。那么，哪些数是会重复出现的呢？

想到我们的目的是用这两个立方体表示日历，也就是01-31这一串数字。那么，有哪些数字是在个位和十位上都必须有的呢？我们有11号和22号，所以1和2这两个数字在两个立方体上必须都出现，那这样一算，正好就是12个数字和12个面，可以一一对应了。

但是如果你细想想，就会发现不对啊，当日期是一位数的时候，0还需要在十位的位置上补位呢，所以0也必须同时出现在两个立方体上。如果0也必须出现2次，那就有13个数字，要出现在12个面上了。这样就少了一个面。怎么办？其实如果你能想到这里，就已经能拿到一半的分了。

那少的这一面该怎么办？怎么在12个面上放13个数字？有没有数字能重复用？有，那就是6和9。到这为止，这个问题就解决了。

那这个问题考核的是什么呢？这里的考点叫"跨越思维"，也就是跳出固定框架去思考的能力。如果你觉得6就是6，9就是9，那就是没有跳出固定的思维框架。

这种跨越思维的能力，在现实生活中，极其重要。比如，谁说冰箱的冰格，一定要在冰箱里面呢？如果把冰格放满厨房呢？这就是"分布式冰箱"。跨越思维，是创新的源泉。我们对创新能力要求高的人，非常重视对这种能力的考核。

同样，如果我感觉到你对这道题很熟悉，后面还有几十道其他类似的题等着。再次记住，思维方式，比答案重要。

![图片](https://piccdn3.umiwi.com/img/201803/02/201803021834471457477587.png)

![图片](https://piccdn3.umiwi.com/img/201803/02/201803021837312912496811.png)

第三题：

3） 昨天，我早上8点爬山，晚上8点到山顶。睡了一觉后，今天，我早上8点从山顶原路下山，晚上8点到山脚。请问，有没有一个时刻，昨天和今天，我站在同样位置？

这道题我先告诉你答案：一定有。

很多同学会想：我上山跟下山的速度肯定是不一样的，那是不是一定有呢？可能有吧。怎么证明呢？很多人就开始列方程，算了一打草稿纸也没算出来。这道题其实是一个"转换思路"的问题。

你可以把这道题转换成这样的一道题：你和另一个人，一个从山顶往下走，一个从山脚往上走，走的是同一条路，是不是一定会相遇？答案是一定的啊，你们走在一条路上，一定会遇见的。

这道题就是这么简单，但如果你不懂得"转换思维"，可能就是答不出来。

甚至，如果你习惯用数学方式来解题，我还可以给你提供一个思路：你可以画一个坐标系，横轴是时间，早八点到晚八点，纵轴是山的高度，从0到海拔多少米。这时候你按照两天的行程画出两条线，你就会发现，无论你怎么画，两天的速度有多么不一样，这两条线都一定会在某一时刻、某一高度相交的。好，第三题就说到这里。

![图片](https://piccdn3.umiwi.com/img/201803/02/201803021759330643277001.jpg)

这个"转换思维"有什么用处呢？就是用"其实就是"这四个字，看透问题，然后找到解决方案。

顾客吃完饭结账，200元。服务员说，"对了，我们今天有个充值免单活动。您只要充值1000元，这顿饭就可以免单，很划算呢"。全额免单？这是莫大的优惠啊！你可能冲了1000元。但是，如果有"转换思维"，你就会想到，这"其实就是"花1000元买1200元的东西。相当于打了83折。

"其实就是"这样的转化思维，在解决商业问题，技术问题时，至关重要。

第四题：

4） 上海有多少辆自行车？

这个问题吴军老师在他的专栏里讲高盛的时候，也提到过一个类似的，问的是纽约上空在任何一个时间点有多少架飞机。它的逻辑本质上跟自行车这道是一样的，感兴趣的同学可以看一下文末的链接，我从吴军老师那里申请来了这篇文章，给你免费读。

这道题考的是"系统思维"。也就是你理解一个系统、事物之间的关联的能力。这道题其实是没有标准答案的，我在这给你提供几种思路。

比如，你可以先查一下上海一共有多少人口，接下来你可以估算一下，这些人口当中有多大比例是骑自行车的？比如可能20-60岁之间，工作的人会骑自行车，通过比例你可以估算出有多少自行车。你还可以大致算一下上海有多少条街道，每条街道大致能容纳多少辆自行车，这样也能得出一个相对准确的数字。甚至在以前，自行车挂车牌的时候，有的人会说，我去街上随机拦几十辆自行车，算出这几十辆自行车车牌数字的中位数，通过这个中位数，我也能算出上海市一共发放了多少车牌。

当然，这些都是思路，而且也并非是完美的思路。这就对了。因为只有没有标准答案，我才能测试你的思路，测试你发现自行车和人群、自行车和街道、自行车和车牌或者和这个生态中其他因素的关系的能力，也就是建立模型，构建系统的能力。当你建立模型，构建系统的能力越接近现实世界，你的"系统思维"能力就越强。

这种系统思维能力重不重要呢？这种系统思考的能力，在软件世界的能力，我想我就不用说了。就算在商业世界，也尤其重要。比如，在分析房价问题时，到底是房租决定了房价，还是房价决定了房租？当你能够画出一张模型图，找到中间相互关联的各种自变量和因变量，你才能系统性地思考和回答这个问题。

最后一个题，第五题：

5） 如何用两个指针，来判断一个链表是否有环？

上周说这道题的时候，我说大部分人是没学过数据结构的，如果你不懂，可以忽略这道题。这其实是我埋的一个伏笔。我之所以放这道题在这，就是想看看，在不懂计算机、不懂数据结构的情况下，你是否会去查一查什么是链表，什么叫做指针。

以前我在微软的时候，有一个人来面试，但是面试没通过，他就特别遗憾，说特别想进微软。当时，他的面试官就从桌上拿起了一本厚厚的全英文的书，跟他说：如果你真的想来微软，那就把这本书拿回去看，一个星期之后再过来。结果，一个星期之后这个人真的回来了，而且很不错地回答了考官问的，关于这本书的问题。要知道，这本书是全英文的专业书籍，如果没有强烈的求知欲和快速学习能力，是不可能在一周之内看完的。后来这个人也如愿以偿进了微软。当我们问他是怎么啃下这本这么难的书的时候，他说，他天天在家翻这本书，夏天天气热，他妈妈就在旁边帮他扇扇子，就这么没日没夜地看了一个星期。

这道题也是一样，考察的就是你的求知欲和快速学习的能力。

那我们说回这道题。你对区块链感兴趣吗？区块链就是一种链表。但是，很多号称懂区块链的人，可能从来没有学过"链表"这种数据结构。我们简单介绍一下。

什么叫做用两个指针来判断一个链表是否有环？

你可以把"链表"想象成无数的小房间，每个房间里面都有一张纸条，纸条里上写的是下一个房间的坐标，如果你进到第357号房间，纸条上写着456，那你就跑到第456号房间。然后456房间里面写着578，你就再跑到578号房间，然后从578再到632，从632再到7号房。这就叫链表，其实一点都不复杂。

那什么叫有环呢？你到了7号房间，发现里面的纸条写着456。你进到456，咦，我刚才不是来过吗？这就是环。那什么是指针呢？你，或者说一直在走的这个人，就是指针。

那怎么来判断这个链表是不是有环？这里面考察的就是"相对思维"。

这道题的解法是这样的。让两个人同时走房间，其中一个人一间一间的走，另一个人要走得更快一些，在前一个人走一个房间的时间内，他要走两个房间。这样，每当前者走一个房间，后者就比前者多走了一个房间，相对于前者，后者多走的房间就会越来越多。那么，如果这个链表有环的话，后者就一定会在某一个房间和前者相遇。否则，两人都会先后到达终点。

这就是"相对思维"，就是让你在一个无休无止的问题里面，懂得制造相对速度。

好了，通过这5道题，我其实讲了微软面试人时，非常看重的，独立于专业知识的几种思维能力：分解能力，跨越思维，转换思维，系统思维，和相对思维。

我很有幸，通过了面试加入了微软。在微软的14年，和创业的5年，深深感受到这些能力对我的巨大帮助。不管你是否加入微软，我都建议你，培养这些能力。做出这些题不重要，拥有这些思维能力，更重要。

好，这就是这5道题的答案了，希望今天的讲解能够对你有所启发。

![图片](https://piccdn3.umiwi.com/img/201803/02/201803021815373990899501.jpg)
