微软面试题(附答案)
微软面试 IQ 题 面试, IQ 题 第一组 1.烧一根不均匀的绳,从头烧到尾总共需要 1 个小时。现在有若干条材质相同的绳子,问如 何用烧绳的方法来计时一个小时十五分钟呢? 2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少 个就可以确定你肯定有两个同一颜色的果冻? 3.如果你有无穷多的水,一个 3 公升的提捅,一个 5 公升的提捅,两只提捅形状上下都不均 匀,问你如何才能准确称出 4 公升的水? 4.一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎 国的。 诚实国永远说实话, 说谎国永远说谎话。 现在你要去说谎国, 但不知道应该走哪条路, 需要问这两个人。请问应该怎么问? 5.12 个球一个天平, 现知道只有一个和其它的重量不同, 问怎样称才能用三次就找到那个球。 13 个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑) 6.在 9 个点上画 10 条直线,要求每条直线上至少有三个点? 7.在一天的 24 小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别 是什么时间?你怎样算出来的? 8.怎么样种植 4 棵树木,使其中任意两棵树的距离相等? 第二组 1.为什么下水道的盖子是圆的? 2.中国有多少辆汽车? 3.将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁? 4.如果你要去掉中国的 34 个省(含自治区、直辖市和港澳特区及台湾省)中的任何一个, 你会去掉哪一个,为什么? 5.多少个加油站才能满足中国的所有汽车? 6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下? 7.为什么在任何旅馆里,你打开热水,热水都会瞬间倾泻而出? 8.你怎样将 Excel 的用法解释给你的奶奶听? 9.你怎样重新改进和设计一个 ATM 银行自动取款机? 10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始? 11.如果你的生涯规划中打算在 5 年内受到奖励, 那获取该项奖励的动机是什么?观众是谁? 12.如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什么样商业 计划?为什么? 13.如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫做一件事, 那件事将是什么? 第三组 1.你让工人为你工作 7 天,回报是一根金条,这个金条平分成相连的 7 段,你必须在每天结 束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费? 2.有一辆火车以每小时 15 公里的速度离开北京直奔广州,同时另一辆火车每小时 20 公里的 速度从广州开往北京。如果有一只鸟,以 30 公里每小时的速度和两辆火车同时启动,从北 京出发,碰到另一辆车后就向相反的方向返回去飞,就这样依次在两辆火车之间来回地飞, 直到两辆火车相遇。请问,这只鸟共飞行了多长的距离?3.你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的药丸的重 量+1。只称量一次,如何判断哪个罐子的药被污染了? 4.门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能看到室内灯的情 况,现在只允许进门一次,确定开关和灯的对应关系? 5.人民币为什么只有 1、2、5、10 的面值? 6.你有两个罐子以及 50 个红色弹球和 50 个蓝色弹球,随机选出一个罐子, 随机选出一个 弹球放入罐子,怎么给出红色弹球最大的选中机会?在你的计划里,得到红球的几率是多 少? 7.给你两颗 6 面色子,可以在它们各个面上刻上 0-9 任意一个数字,要求能够用它们拼出任 意一年中的日期数值 第四组 第一题 . 五个海盗抢到了 100 颗宝石,每一颗都一样大小和价值连城。他们决定这么分: 抽签决定自己的号码(1、2、3、4、5) 首先,由 1 号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,按照他的方案 进行分配,否则将被扔进大海喂鲨鱼 如果 1 号死后,再由 2 号提出分配方案,然后剩下的 4 人进行表决,当且仅当超过半数的人 同 意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼 依此类推 条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。 问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化? 第二题 . 一道关于飞机加油的问题,已知: 每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈, 问题: 为使至少一架飞机绕地球一圈回到起飞时的飞机场, 至少需要出动几架飞机? (所有飞机从 同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场) 第三题. 汽车加油问题 一辆载油 500 升的汽车从 A 开往 1000 公里外的 B,已知汽车每公里耗油量为 1 升,A 处有 无穷多的油, 其他任何地点都没有油, 但该车可以在任何地点存放油以备中转, 问从 A 到 B 最少需要多少油 第四题. 掷杯问题 一种杯子,若在第 N 层被摔破,则在任何比 N 高的楼层均会破,若在第 M 层不破,则在任 何比 M 低的楼层均会破,给你两个这样的杯子,让你在 100 层高的楼层中测试,要求用最 少的测试次数找出恰巧会使杯子破碎的楼层。 第五题. 推理游戏 教授选出两个从 2 到 9 的数,把它们的和告诉学生甲,把它们的积告诉学生乙,让他们轮流 猜这两个数 甲说: “我猜不出” 乙说: “我猜不出” 甲说: “我猜到了” 乙说: “我也猜到了” 问这两个数是多少第六题. 病狗问题 一个住宅区内有 100 户人家,每户人家养一条狗,每天傍晚大家都在同一个地方遛狗。已知 这些狗中有一部分病狗,由于某种原因,狗的主人无法判断自己的狗是否是病狗,却能够分 辨其他的狗是否有病,现在,上级传来通知,要求住户处决这些病狗,并且不允许指认他人 的狗是病狗(就是只能判断自己的) ,过了 7 天之后,所有的病狗都被处决了,问,一共有 几只病狗?为什么? 第七题. U2 合唱团在 17 分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的同一 端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。一次同时最多可以 有两人一起过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去,来回桥 两端。手电筒是不能用丢的方式来传递的。四个人的步行速度各不同,若两人同行则以较慢 者的速度为准。BONO 需花 1 分钟过桥,EDGE 需花 2 分钟过桥,ADAM 需花 5 分钟过 桥,LARRY 需花 10 分钟过桥,他们要如何在 17 分钟内过桥呢? 第八题. 监狱里有 100 个房间,每个房间内有一囚犯。一天,监狱长说,你们狱房外有一电 灯,你们在放风时可以控制这个电灯(熄或亮) 。每天只能有一个人出来放风,并且防风是 随机的。如果在有限时间内,你们中的某人能对我说: “我敢保证,现在每个人都已经至少 放过一次风了。 ”我就放了你们!问囚犯们要采取什么策略才能被监狱长放掉?如果采用了 这种策略,大致多久他们可以被释放? 第五组 1.某手机厂家由于设计失误,有可能造成电池寿命比原来设计的寿命短一半(不是冲放电时 间) 解决方案就是免费更换电池或给 50 元购买该厂家新手机的折换券。 , 请给所有已购买的 用户写信告诉解决方案。 2.一高层领导在参观某博物馆时,向博物馆馆员小王要了一块明代的城砖作为纪念,按国家 规定,任何人不得将博物馆收藏品变为私有。博物馆馆长需要如何写信给这位领导,将城砖 取回。 3.营业员小姐由于工作失误,将 2 万元的笔记本电脑以 1.2 万元错卖给李先生,王小姐的经 理 怎么写信给李先生试图将钱要回来? 4.给你一款新研制的手机,如果你是测试组的组长,你会如何测试? 5.如何为函数 int atoi(const char * pstr)编写测试向量? 第六组 1.链表和数组的区别在哪里? 2.编写实现链表排序的一种算法。说明为什么你会选择用这样的方法? 3.编写实现数组排序的一种算法。说明为什么你会选择用这样的方法? 4.请编写能直接实现 char * strcpy(char * pstrDest,const char * pstrSource)函数功能的代码。 5.编写反转字符串的程序,要求优化速度、优化空间。 6.在链表里如何发现循环链接? 7.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。 8.写一个函数,检查字符是否是整数,如果是,返回其整数值。 (或者:怎样只用 4 行代码 9.给出一个函数来输出一个字符串的所有排列。 10.请编写实现 void * malloc(int)内存分配函数功能一样的代码。 11.给出一个函数来复制两个字符串 A 和 B。 字符串 A 的后几个字节和字符串 B 的前几个字 节重叠。 12.怎样编写一个程序,把一个有序整数数组放到二叉树中?13.怎样从顶部开始逐层打印二叉树结点数据?请编程。 14.怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)? -15.请编写能直接实现 int atoi(const char * pstr)函数功能的代码。 --------------------------------------------------------------------------------------第一组题答案: 1)三根绳,第一根点燃两端,第二根点燃一端,第三根不点 第一根绳烧完(30 分钟)后,点燃第二根绳的另一端,第二根绳烧完(45 分钟)后,点燃 第三根绳子两端,第三根绳烧完(1 小时 15 分)后,计时完成 2)根据抽屉原理,4 个 3)3 升装满;3 升-〉5 升(全注入) 升装满;3 升-〉5 升(剩 1 升) 升倒掉;3 升-〉5 ;3 ;5 升(注入 1 升) 升装满;3 升-〉5 升;完成(另:可用回溯法编程求解) ;3 4)问其中一人:另外一个人会说哪一条路是通往诚实国的?回答者所指的那条路必然是通 往说谎国的。 5)12 个球: 第一次:4,4 如果平了: 那么剩下的球中取 3 放左边,取 3 个好球放右边,称: 如果左边重,那么取两个球称一下,哪个重哪个是次品,平的话第三个重,是次品,轻 的话同理 如果平了,那么剩下一个次品,还可根据需要称出次品比正品轻或者重 如果不平: 那么不妨设左边重右边轻,为了便于说明,将左边 4 颗称为重球,右边 4 颗称为轻球,剩下 4 颗称为好球 取重球 2 颗,轻球 2 颗放在左侧,右侧放 3 颗好球和一颗轻球 如果左边重 称那两颗重球,重的一个次品,平的话右边轻球次品 如果右边重 称左边两颗轻球,轻的一个次品 如果平 称剩下两颗重球,重的一个次品,平的话剩下那颗轻球次品 13 个球: 第一次:4,4,如果平了 剩 5 颗球用上面的方法仍旧能找出次品,只是不能知道次品是重是轻 如果不平,同上 6) o o o ooo o o o 7) 23 次,因为分针要转 24 圈,时针才能转 1 圈,而分针和时针重合两次之间的间隔显然>1 小时,它们有 23 次重合机会,每次重合中秒针有一次重合机会,所以是 23 次 重合时间可以对照手表求出,也可列方程求出 8)在地球表面种树,做一个地球内接的正四面体,内接点即为所求 第二组 无标准答案 第三组 1. 分成 1,2,4 三段,第一天给 1,第二天给 2 取回 1,第 3 天给 1,第 4 天给 4 取回 1、2, 第 5 天给 1,第 6 天给 2 取回 1,第七天给 1 2. 求出火车相遇时间,鸟速乘以时间就是鸟飞行的距离 3. 四个罐子中分别取 1,2,3,4 颗药丸,称出比正常重多少,即可判断出那个罐子的药被污染 4. 三个开关分别:关,开,开 10 分钟,然后进屋,暗且凉的为开关 1 控制的灯,亮的为开 关 2 控制的灯,暗且热的为开关 3 控制的灯 5. 因为可以用 1,2,5,10 组合成任何需要的货币值,日常习惯为 10 进制 6. 题意不理解...*_* 7. 012345 0126(9)78 第四组 都是很难的题目 第一题:97 0 1 2 0 或者 97 0 1 0 2 (提示:可用逆推法求出) 第二题:3 架飞机 5 架次,飞法: ABC 3 架同时起飞,1/8 处,C 给 AB 加满油,C 返航,1/4 处,B 给 A 加满油,B 返航,A 到达 1/2 处,C 从机场往另一方向起飞,3/4 处,C 同已经空油箱的 A 平分剩余油量,同时 B 从机场起飞,AC 到 7/8 处同 B 平分剩余油量,刚好 3 架飞机同时返航。所以是 3 架飞机 5 架次。 第三题:需要建立数学模型 (提示,严格证明该模型最优比较麻烦,但确实可证,大胆猜想是解题关键) 题目可归结为求数列 an=500/(2n+1) n=0,1,2,3......的和 Sn 什么时候大于等于 1000,解得 n>6 当 n=6 时,S6=977.57 所以第一个中转点离起始位置距离为 1000-977.57=22.43 公里 所以第一次中转之前共耗油 22.43*(2*7+1)=336.50 升 此后每次中转耗油 500 升 所以总耗油量为 7*500+336.50=3836.50 升 第四题:需要建立数学模型 题目可归结为求自然数列的和 S 什么时候大于等于 100,解得 n>13 第一个杯子可能的投掷楼层分别为:14,27,39,50,60,69,77,84,90,95,99,100 第五题:3 和 4(可严格证明) 设两个数为 n1,n2,n1>=n2,甲听到的数为 n=n1+n2,乙听到的数为 m=n1*n2 证明 n1=3,n2=4 是唯一解 证明:要证以上命题为真,不妨先证 n=7 1)必要性: i) n>5 是显然的,因为 n6 因为如果 n=6 的话,那么甲虽然不知道(不确定 2+4 还是 3+3)但是无论是 2,4 还是 3,3 乙都不可能说不知道(m=8 或者 m=9 的话乙说不知道是没有道理的) iii) n=8 的话,就可以将 n 分解成 n=4+x 和 n=6+(x-2),那么 m 可以是 4x 也可以是 6(x-2)而 4x=6(x-2)的必要条件是 x=6 即 n=10,那样 n 又可以分解成 8+2,所以总 之当 n>=8 时,n 至少可以分解成两种不同的合数之和,这样乙说不知道的时候,甲就没有 理由马上说知道。 以上证明了必要性 2)充分性当 n=7 时,n 可以分解成 2+5 或 3+4 显然 2+5 不符合题意,舍去,容易判断出 3+4 符合题意,m=12,证毕 于是得到 n=7 m=12 n1=3 n2=4 是唯一解。 第六题:7 只(数学归纳法证明) 1)若只有 1 只病狗,因为病狗主人看不到有其他病狗,必然会知道自己的狗是病狗(前提 是一定存在病狗) ,所以他会在第一天把病狗处决。 2)设有 k 只病狗的话,会在第 k 天被处决,那么,如果有 k+1 只,病狗的主人只会看到 k 只病狗,而第 k 天没有人处决病狗,病狗主人就会在第 k+1 天知道自己的狗是病狗,于是 病狗在第 k+1 天被处决 3)由 1)2)得,若有 n 只病狗,必然在第 n 天被处决 第七题: (提示:可用图论方法解决) BONO&EDGE 过(2 分) ,BONO 将手电带回(1 分) ,ADAM&LARRY 过(10 分) ,EDGE 将手电带回(2 分) ,BONO&EDGE 过(2 分) 2+1+10+2+2=17 分钟 第八题: 约定好一个人作为报告人(可以是第一个放风的人) 规则如下: 1、报告人放风的时候开灯并数开灯次数 2、其他人第一次遇到开着灯放风时,将灯关闭 3、当报告人第 100 次开灯的时候,去向监狱长报告,要求监狱长放人...... 按照概率大约 30 年后(10000 天)他们可以被释放 第五组无标准答案 第六组部分题参考答案: 4. char * strcpy(char * pstrDest,const char * pstrSource) { assert((pstrDest!=NULL)&&(pstrSource!=NULL)); char * pstr=pstrDest; while((*(pstrDest++)=*(pstrSource++))!='\0'); return pstr; } 5. char * strrev(char * pstr) { assert(pstr!=NULL); char * p=pstr; char * pret=pstr; while(*(p++)!='\0'); p--; char tmp; while(p>pstr) { tmp=*p; *(p--)=*(pstr);*(pstr++)=tmp; } return pret;