微软面试题!

sharpmark 2001-08-11 06:22:44
  你让工人为你工作7天,回报是一根金条。这个金条被平分成相连的7段。你必须在每一天结束的时候给他们一段金条。如果只允许你有两次把金条截断,那你如何给你的工人付费?

  想象你正站在一个镜子面前,正对着。举起你的左手,再举起你的右手,看看你的影像。当你举起你的左手时,你的影像举起的是他的右手。但是当你翘起你的脑袋时,你的影像表现一致,而不是将他的脑袋降低。为什么镜子中的影像能够颠倒左右,却不能颠倒上下?

  你有四个装了药丸的罐子。每一个药丸都有一定的重量,被污染的药丸被放在一个罐子里,而且它的重量是正常药丸重量+1。只称量一次,如何判断那一个罐子是放了被污染的药丸?

  你有一桶果冻,其中有红色、蓝色、绿色三种。闭上眼睛,选出同样颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?
...全文
554 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
csuker 2001-08-17
  • 打赏
  • 举报
回复
是因为人的照片是左右长着的。
sharpmark 2001-08-14
  • 打赏
  • 举报
回复
当然不是,我只是在学习,学习,学习,学习,学习,学习,学习,学习……
所以,上网时间少,不好意思。
大家的解法我都看了,解的不错。
我想说的是第二题:当你举左手时,镜子里的人举的相对你仍是左面的手(即他的右手);当你向上抬头时,镜子里的人也向上抬头。其实只是由于面对面的两个人的左右方向上是相反的(参照物不同),而上下方向是相同的,所以不是镜子“会左右颠倒,不会上下颠倒”而是由于参照物的不同而引起的。
其它题于众人无异。
过两天我来结账!
one_add_one 2001-08-14
  • 打赏
  • 举报
回复
to duguran

你怎么还没来?


你不会是把csdn的网址忘记了吧?
one_add_one 2001-08-14
  • 打赏
  • 举报
回复
to yug(寒鹤),roy_hu(roy_hu)
原来在网上看到的,保存下来了!
roy_hu 2001-08-12
  • 打赏
  • 举报
回复
to one_add_one: 你在哪里找到的呀?
现在发现微软真的很喜欢考关于二进制的题目
chinamengnan 2001-08-12
  • 打赏
  • 举报
回复
这些真的是微软面试题吗?
他们脑子坏了吗?会出这么简单的题目?
ljunfa 2001-08-11
  • 打赏
  • 举报
回复
不错!
程序猿1234567 2001-08-11
  • 打赏
  • 举报
回复
第二个问题:
这是由于人们对左右的定义问题。人们在分析镜子中的人的时候,把标准以y轴为轴旋转了180度。本来是后的变成了前,于是左就成为了右。但是由于是以y轴为轴,所以上下不变。
yug 2001-08-11
  • 打赏
  • 举报
回复
呵呵,有意思!
one_add_one()快给分给分(),你在哪儿找来这么多东西啊?
one_add_one 2001-08-11
  • 打赏
  • 举报
回复
第一题:


【断金链难题】

  一位来自阿肯色州的年轻太太格罗丽亚,正在加利福尼亚州旅行.她想在旅馆租用一个房间,租期一周.办事员此时正心绪不佳.办事员:"房费每天20元,要付现钱.格罗丽亚:"很抱歉,先生,我没带现钱.但是我有一根金链,共7节,每节都值20元以上.办事员:"好吧,把金链给我." 格罗丽亚:"现在不能给你.我得请珠宝匠把金链割断,每天给你一节,等到周末我有了现钱再把金链赎回.办事员终于同意了,但格罗丽亚必须决定如何断开金链的方法.格罗丽亚:"我该三思而行,因为珠宝匠是按照他所切割和以后重新连接的节数来索价的.格罗丽亚想了一下,悟到她不必把每一节都割断,因为她可以把一段段金链换进换出,以这种方式来付房费.当她算出需要请珠宝匠割断的节数时,她几乎不能自信.你想一想需要割开多少节?
只需要割开一节.这一节应是从一端数起的第三节.把金链断开成1节,2节,4节这样三段后就能以换进换出的方式每天付给办事员一节作为房费.
啊哈!领悟到下列两点才能解题.第一,至少需要有1节,2节,4节这样三段(即其节数成二重级数的一些段),这样才能以各种不同的组合方式组成1节,2节,3节,4节,5节,6节和7节.我们在药品混乱问题中已经知道,这就是作为二进制记数法基础的幂级数.
第二,只需要割开一节就可以把金链分成符合要求的三段.关于这个问题,若把金链的长度增加,则可以想出一些新的问题.例如,假设格罗丽亚有一根63节的金链,她想把金链割开,以上面那种方式来付63天的房费(价格不变).要达到此种目的只需要割开三节.你想出来了吗?你能否根据金链的不同长度设计一个通用的解题程序,要求分割开的节数为最少?
有一个有趣的变相问题:若所经手的 n 节首尾相连的闭合回路,例如说格罗丽亚有一串金项链,由79节相连而成,若每天房费为一节,试问最少需要分割开几节才能支付79天房费?
所有这些问题都跟二进制记数法有密切的关系.比如格罗丽亚的63节金项链如何分割?只要将63化成二进制表示:等于"111111"即63=1+2+4+8+16+32只要将从第二节开始的两节割开,再将从第八节开始的八节割下来,和从第32节开始的32节割下来即可,这样就有了从1,2,3,4,5,6,直到63的所有节数.一般地,若有 n 节金链, n 是形如 2k-1类型的数,将 n 化成二进制表示,再将所有"1"的位置所代表的2的幂的数相间隔地割开即可达到目的.但是对于其他任意类型的数,却不能奏效,比如对于格罗丽亚的79节金项链,79的二进制记数法表示为"1001111".即79=1+2+4+8+0+0+64,这样从1到15都能表示,可是从16到63都没法表示,我把这个问题做到这里,也一时糊涂起来,但这个问题毕竟不是很复杂,咱们也学一学闵科夫斯基在课堂上口出狂言要解决四色问题的劲头,摸索着来解决一把.咱们可以这样:你不是要求节数最少吗?假设 n=a+b 其中 a 是已经找到的最大的那一节数,b 是比 n 小的已经解决了的金链问题,由于 b 已经解决,因此 b 的拆分能够表示从1,2,3,...b-1,b 的所有金链节数,而再大一些的数就不能够表示了,比如 b+1,所以必须要 a 参加进来,如果 n 是奇数,可令 a=b+1,这样 n=2b+1,所以 b=(n-1)/2,a=(n+1)/2,这样就找到了最大的一节的节数 a ,然后对 b=(n-1)/2继续应用如上的办法,即可解决问题.如果 n 是偶数,可令 a=b ,这样虽然 a 本身不能表示出 b+1,但是可以从 b 的拆分中拿出一个1来(这个1是必须存在的,因为要表示从1,2,3,...b-1,b的所有数)与 a 组成 a+1 也就是 b+1.所以 n=a+b=2a=2b,a=b=n/2.这样也找到了 n 为偶数时最大的一节金链的节数.对于 b 继续如上的过程,就可以找到全部应该断开的金链节数,我算出了从1到15的所有拆分如下:
1=1
2=1+1
3=1+2
4=1+1+2
5=1+1+3
6=1+2+3
7=1+2+4
8=1+1+2+4
9=1+1+2+5
10=1+1+3+5
11=1+1+3+6
12=1+2+3+6
13=1+2+3+7
14=1+2+4+7
15=1+2+4+8
对于上面的格罗丽亚太太的79节金项链,79+1=80,80/2=40,所以最大的一节就是40节,79-40=39,39+1=40,40/2=20,所以第二大的一节就是20节,39-20=19,19+1=20,20/2=10,第三大的一节是10节,19-10=9,9+1=10,10/2=5,又找到了一节是5,9-5=4,4的表示法如上已经列出来了:4=1+1+2.最后得到79节的金项链的分割法:1,1,2,5,10,20,40.过去我也碰到过一道类似的题,是23节金项链,也能够很容易地解决:23+1=24,24/2=12;23-12=11,11=1+1+3+6;所以23的分割法为:1,1,3,6,12.显然,对于2k-1类型的数,用这里的办法与用二进制记数法得出的结果是一致的.
从上面所列出的拆分法可以看出,如果 2k=<n<2k+1,那么 n 一定要用 k+1个数来表示,即: n=a0+a1+a2+...+ak.
可以用数学归纳法很容易地证明这是正确的.那么还有没有比这更少的分割法呢?可以证明没有了.从我们的分析方法中可以看出,这是一个构造性的推理过程,假如还有比这更少的分割法,那么相当于在表达式 n=a0+a1+a2+...+ak.中进行了某些组合,比如将a1+a2合并成新的a1,那么原来的有些组合就表示不出来了,例如a0+a2,就没有办法组合了.当然,一个数的拆分不是唯一的,前面的23节金链还可以分成1,2,3,6,11.你可以试试,这种分割法照样能满足要求.前面的分析中也可以把 (n-1)/2 留下来作为最大的节数,但是这样分出来的节数就不一定都是最少的了,例如把15这样分割,会得到:1,1,2,4,7.虽然能够满足付房费的要求,但是就不是最优解了.最后总结一下,把前面的算法过程公式化可以得到:
k-1 r-1 k-1
n=(n+c0)/2+ ∑ {[n-∑cs2s+cr2r]/2r+1}+[n-∑cr2r]/2k
r=1 s=0 r=0
其中c0,c1,...ck-1等等是1或是0取决于每一步得出的数的奇偶性.其实最后一项等于1,这样可以得出:
k-1
n-2k = ∑cr2r
r=0
a0=(n+c0)/2

i-1
ai=[n-∑cs2s+ci2i]/2i+1 1 (i=1,2,3,...k-1)
s=0

ak=1
one_add_one 2001-08-11
  • 打赏
  • 举报
回复
第一题:


【泡泡糖问题】

可怜的琼斯夫人路过泡泡糖出售机时,尽量不使她的双胞胎儿子有所察觉.
大儿子:"妈妈,我要泡泡糖."
二儿子:"妈妈,我也要,我要和比利拿一样颜色的."
分币泡泡糖出售机几乎空了,里面只有4粒白色的和6粒红色的泡泡糖.说不准下一粒是什么颜色.琼斯夫人如果要得到两粒同种颜色的泡泡糖,需要准备花多少钱?
是不是琼斯夫人需要花6分钱,准可以得到2粒红色的糖----就算所有白色的糖花去4分钱,还有两分钱可以买到2粒红色的糖.或者她花去8分钱准可得到2粒白色的糖,所以她需要花8分钱是吗?如果你这样算,那就错了,因为琼斯夫人并不要求必须得到两粒红色的糖或者两粒白色的糖,她只要求两粒同色的糖,即使先取到两粒不同色的糖,第三粒必定与前两粒中的一粒同色.所以她最多只需要花3分钱.
如果出售机内有6粒红色的,4粒白色的,5粒蓝色的.琼斯夫人最多要花多少钱?显然只要花4分钱即可.
如果琼斯夫人的孩子是三胞胎,那该怎样呢?最坏的情况是她拿到了2粒红的,2粒白的和2粒兰的,第七粒肯定与前六粒中的两粒同色,所以她最多需要花7分钱.
如果只有一粒蓝色的泡泡糖,那么显然只要花6分钱即可买到三粒同色的糖.
假如琼斯夫人是幼儿园的老师,她带着 k 个孩子路过泡泡糖出售机,出售机中有 n 组同色的泡泡糖,且每组糖至少有 k 粒,她需要花多少钱呢?
最坏情况是她每种颜色的泡泡糖都买了 k-1 粒,那么再买一粒即可,所以她最多需要花 n(k-1)+1 分钱.
如果 n 组糖中有一组或几组同色的糖少于 k 粒,又是什么情况呢?
让我们假设有 m 组同色的泡泡糖少于 k 粒,并且设其中第 i 组糖有 ai 粒,那么琼斯夫人最倒霉的事情是,她把所有少于 k 粒的同色糖都买了,并且其他种类的糖每种都买了 k-1 粒,最后再买一粒才能得到 k 粒同色的糖.所以她最多需要花:
m
(n-m)(k-1)+1+∑ai
i=1
分钱.
这种类型的题目很多,又比如从52张纸牌中抽出7张同花的牌,那么最多需要抽多少张牌呢?显然需要 4(7-1)+1=25 张.
one_add_one 2001-08-11
  • 打赏
  • 举报
回复
第三题是个著名的数学问题


【药品混乱问题】

  一家药店收到运来的某种药品十瓶。每瓶装药丸1000粒。药剂师怀特先生刚把药瓶送上架子,一封电报接踵而来。怀特先生把电报念给药店经理布莱克小姐听。
怀特先生:“特急!所有药瓶须检查后方能出售。由于失误,其中有一瓶药丸每粒超重10毫克。请即退回分量有误的那瓶药。怀特先生很气恼。
怀特先生:“倒霉极了,我只好从每瓶中取出一粒来秤一下。真是胡闹。
怀特先生刚要动手,布莱克小姐拦住了他。布莱克小姐:“等一下,没必要秤十次,只需秤一次就够了。这怎么可能呢?
布莱克小姐的妙主意是从第一瓶中取出1粒,从第二瓶中取出2粒,第三瓶中取出3粒,以此类推,直至从第十瓶中取出10粒。把这55粒药丸放在秤上,记下总重量。如果重5510毫克,也就是超过规格10毫克,她当即明白其中只有一粒是超重的,并且是从第一瓶中取出的。
如果总重量超过规格20毫克,则其中有2粒超重,并且是从第二瓶中取出的,以此类推进行判断。所以布莱克小姐只要秤一次,不是吗?
六个月后,药店又收到此种药品十瓶。一封加急电报又接踵而至,指出发生了一个更糟糕的错误。
这一次,对超重药丸的瓶数无可奉告。怀特先生气恼极了。怀特先生:“布莱克小姐,怎么办?我们上次的方法不中用了。布莱克小姐没有立即回答,她在思索这个问题。
布莱克小姐:“不错。但如果把那个方法改变一下,我们仍然只需秤一次就能把分量有误的药品识别出来。这回布莱克小姐又有什么好主意?
在第一个秤药丸问题中,我们知道只有一瓶药丸超重。从每瓶中取出不同数目的药丸(最简单的方式就是采用计数序列),我们就可使一组数字和一组药瓶成为一一对应的关系。
为了解决第二个问题,我们必须用一个数字序列把每瓶药单独标上某个数字,且此序列中的每一个子集必须有一个单独的和。有没有这样的序列?有的,最简单的就是下列二重序列:1,2,4,8,16,。。。这些数字是2的连续次幂,这一序列为二进制记数法奠定了基础。
在这个问题中,解法是把药瓶排成一行,从第一瓶中取出1粒,从第二瓶中取出2粒,从第三瓶中取出4粒,以此类推。取出的药丸放在秤上秤一下。假设总重量超重270毫克,由于每粒分量有误的药丸超重10毫克,所以我们把270除以10,得到27,即为超重药丸的粒数。把27化成二进制数:11011。在11011中自右至左,第一,二,四,五位上的“1”表示其权值分别为1,2,8,16。因此分量有误的药瓶是第一,二,四,五瓶。
在由2的幂组成的集合中,每个正整数是单一的不同组合中的元素之和。鉴于这一事实,二进制记数法极为有用。在计算机科学和大量应用数学领域中,二进制记数法是必不可少的。在趣味数学方面,同样也有难以计数的应用。
这里有一个简单的扑克魔术,可叫你的朋友莫名其妙。这个戏法也许看上去与药瓶问题毫无关系,但他们的依据是相同的,都是二进制原理。
请别人把一副牌洗过,然后放进你的口袋,再请人说出一个1至15以内的数字。然后你把手插进你的口袋里,一伸手就取出一组牌,其数值相加正好等于他所说的数字。
此秘密简单的很。在耍魔术之前,预先取出A,2,4,8各一张放入口袋。这副牌缺少区区四张,不大可能为人察觉。洗过的牌放入口袋后,暗中将其排置于原先已经放在口袋中的四张牌的后面。请别人说出一个数字,你用心算将此数表示成2的幂的和。如果是10,那你就应想到:8+2=10,随即伸手入袋,取出2和8的牌示众。
卜算卡片的依据也是二进制原理,准备六张卡片,分别记为A,B,C,D,E,F。然后将一些数字填写在卡片上,确定每张卡片上的数字集合的规则是这样的:在一个数的二进制表示中,若右起第一位是“1”,则此数字就在卡片A上。该卡片上的数字集合自1起始,全部数字就是1至63范围内所有的奇数;卡片B则包括1至63范围内的二进制记数法中右起第二位为“1”的全部数字;卡片C包括1至63范围内的二进制记数法中右起第三位为“1”的全部数字;卡片D,E,F以此类推。注意:63这个数字的二进制记数法是“111111”,每一位都是“1”,因此每张卡片上都有这个数字。
这六张卡片可以用来确定1至63范围内的任意一个数字。请一位观众想好此范围内的一个数字(例如某个人的年龄),然后请他把所有上面有此数字的卡片都交给你。你随即说出他心中所想的那个数字。秘诀就是把每张卡片上2的幂的第一个数字相加。例如,如果把卡片C和F交给你,你只要将上面第一个数字4和32相加,便知道别人心中所想的数字是36。
有时,魔术师为了使得这个戏法显得更加玄妙,故意把每张卡片涂上各种不同的颜色。他只需记住每种颜色所代表的2的幂。例如,红卡片代表1,橙卡片代表2,黄卡片代表4,绿卡片代表8,兰卡片代表16,紫卡片代表32(可依据彩虹的诸色顺序)于是,魔术师站在大房间的一头,请人想好一个数字,并且把上面有此数字的卡片置于身旁,他即可根据那人身旁的卡片的颜色随口说出别人心中所想的数字。
javan 2001-08-11
  • 打赏
  • 举报
回复
分别在A,B,C,D里取出1,2,3,4个药丸。一共10个药丸一起称得到重量Y,求出Y除以10的余数X
如果X=1,则A是被污染。
如果X=2,则B是被污染
如果X=3,则C是被污染
如果X=4,则D是被污染.
one_add_one 2001-08-11
  • 打赏
  • 举报
回复
3:从四个罐子分别取1、2、3、4个称
如果
重1,是第1个罐子
重2,是第2个罐子
重3,是第3个罐子
重4,是第4个罐子
one_add_one 2001-08-11
  • 打赏
  • 举报
回复
4:4个。
one_add_one 2001-08-11
  • 打赏
  • 举报
回复
1:1、2、4。
2:两眼的连线与镜子的方向是垂直的。
panq 2001-08-11
  • 打赏
  • 举报
回复
一根金条
7段 分为 1;2;4的比例
第一天给1/7,
第二天给2/7,工人还出1/7
第三天再给1/7,工人达到3/7
第四天给4/7,工人还出1/7和2/7
第五天给1/7
第六天给2/7,工人还出1/7
第七天给1/7

一个镜子这是物理问题,光线的反射决定了一切.你的左手举起,镜子中相对应的必然是与你的左手同位置,脑袋也是一样的.

对于药丸 污染的药丸的重量是正常药丸重量+1 是指是正常药丸重量的两倍,还是一个重量单位?
请教.

果冻问题,4个就肯定有两个同一颜色的果冻.
Zig 2001-08-11
  • 打赏
  • 举报
回复
1 切成三段,1,2,4
然后带找钱得就可以了。
windindance 2001-08-11
  • 打赏
  • 举报
回复
这么简单——我小学的竞赛题:)
sharpmark 2001-08-11
  • 打赏
  • 举报
回复
to:zig
第一题说得明白些,
加载更多回复(1)

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧