一道微软的面试题:12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?哪为高人能给个详细程序

alexfq 2002-10-12 02:05:45
12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?
...全文
494 70 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
70 条回复
切换为时间正序
请发表友善的回复…
发表回复
heavensongs 2002-12-27
  • 打赏
  • 举报
回复
TO wwlxmai(云淡风轻) :
我仔细看了你的思路,大致没有错。指出一点:
通过3次测量,也无法知道那个坏球是重是轻。所以不能假设,只能靠观察这次指针的偏向和上两次是否一致。一致说明没有移动过,否则就是移动过。这是关键。
只有在三次过后已经知道坏求了,测第四次,才能知道是轻还是重。
heavensongs 2002-12-26
  • 打赏
  • 举报
回复
不知道这个程序能不能用递归实现。感觉有难度。哪位能照我的思路写一个贴上来??
rushman 2002-12-26
  • 打赏
  • 举报
回复
40个球4次机会
121个球5次机会
364个球6次机会
....
n次机会,n>1,可以解决
0 1 2 n-1
3 + 3 + 3 + ... + 3
十几年前我就推出了这个结果。老掉牙的问题,也是经典的问题(我父亲上学的时候就做过了^_^)
celeil 2002-12-26
  • 打赏
  • 举报
回复
搂主,你知道微软的“答题原则”么?他只要思路,不要程序。如果你连思路都没有,还编什么程序阿?能去那儿面试的人,只要有个思路,编程不是问题。
heavensongs 2002-12-26
  • 打赏
  • 举报
回复
不需要知道谁重谁轻。观察+推里。用不到什么数学知识。小学智力竞赛。
heavensongs 2002-12-26
  • 打赏
  • 举报
回复
可以结账了
heavensongs 2002-12-26
  • 打赏
  • 举报
回复
(1,2,3,4), (5,6,7,8),(9,10,11,12)
分成三组。
1。比较任意两组。如果平,则在第三组。有两次机会判断4个很容易。
如果不平,则第三组中的四个都是标准球。
2。接下来是循环移动。将左托盘的任意三个移动到右托盘,同时将右托盘的
任意三个移动到桌子上放在一堆。取四个标准球里的三个放到左托盘。
3。观察第二次指针。
->如果偏转不变,说明那个坏球没有移动过,那只能是左托盘或者
右托盘中那个没动过的。取出左托盘和右托盘中那三个从别处放进去的。
将右边那个移到桌子上,在右托盘放入一个标准球。如果还是不变,那可以肯定就是左边那个。
否则就是移出去的那个。
->如果平衡,则显然怀疑对象在从右托盘移出去的那三个里。清除左右托盘。
将这三个重新放到右托盘。取右托盘里的三个里一个放到左托盘,取另一个
放到桌子上,如果这第三次指针和第一次偏转一样,说明坏球在右托盘,因为第一次
他也在右托盘。平衡,就是那个移动出去的。反向,说明在左托盘。
->如果反偏。说明怀疑对像移动到了右托盘,清除左右托盘。将这三个放到左托盘,
和上面一样如法炮制。
我是受了楼上的启发。要写成程序还是蛮繁的。
13个也是如法炮制,循环移动。
coffeebike 2002-12-26
  • 打赏
  • 举报
回复
分三组A(4)+B(4)+C(4)
称A、B两组,如果相等,则将C(4)分成C(3)+C(1),从A、B中人取一组,分成A(3)+A(1),然后重新分组:A(3)+(A(1)+C(1))+C(3)成三组,称A(3)和C(3),如果相等,则C(1)是坏的,不相等,则C(3)有异常,即或重或轻,最后将C(3)分成C1(1)+C2(1)+C3(1)三组,称C1(1)和C2(1),相等则C3(1)是坏的,不相等,参照第二称的结果可以知道C1(1)、C2(1)哪个是坏的/*如果第二称中C(3)是重,则第三称中重的那个是坏的...*/

在来说第一称不相等的情况。
此时说明C(4)是好的,且设A(4)重于B(4),重新分组:A1(1)+B1(2)+C(1)和A2(1)+B2(2)+C(1)+A3(1)+A4(1),第二称称A1(1)+B1(2)+C(1)和A2(1)+B2(2)+C(1),分三中情况:
一)相等,说明A3(1)或A4(1)是坏的,且坏的是重的,第三称即可分辨
二)A1(1)+B1(2)+C(1)重于A2(1)+B2(2)+C(1),说明A1(1)是坏的且是重的,或者B2(2)有坏的且是轻的,第三称成B2(2)的两个,相等则A1(1)是坏的,不相等则轻的那个是坏的:)
三)A1(1)+B1(2)+C(1)轻于A2(1)+B2(2)+C(1),说明A2(1)是坏的且是重的,或者B1(2)有坏的且是轻的,第三称成B1(2)的两个,相等则A2(1)是坏的,不相等则轻的那个是坏的:)
YoziDream 2002-12-26
  • 打赏
  • 举报
回复
12个球分成3组,每组四个
拿出两组,放在天平上,有两种可能,平和不平,
1、平则在第三组里,可以解决
2、不平,记下谁重谁轻,
从第一组里拿出三个球放在一边,从第二组里拿出三个放在与第一组
从第三个里拿出三个放在第二组
称第二次
1、天平保持原来的偏向,则说明质量不同之球在第一、第二组中未
被动过的两球中,这时可以测出
2、天平偏向反转,则可知道在第二组拿出的三个球中,而且可以知
道此球轻重,可以测出
3、天平保持平衡,则在第一组拿出的三个球中,而且也知道轻重,
可以测出
YoziDream 2002-12-26
  • 打赏
  • 举报
回复
楼上的有点错误?

不需要知道是重还是轻也可以!
刚开始我也以为必须知道是重还是轻。
axuion 2002-12-26
  • 打赏
  • 举报
回复
帖主可以结帐了。
fxniao 2002-12-14
  • 打赏
  • 举报
回复
: kwok_1980(Mars)
就是这么回事,微软不会考真正的编程题。只是考考你的脑筋而已
libi 2002-12-14
  • 打赏
  • 举报
回复
我所写的估计被淹没了。下面是超星上的结论:

结论2:现有N个小球,其中有一个坏球不知比标准球轻还是重。
我们令H={log3(2N)}。(这里是以3为底的对数,花括号是天花板函数)
1)要保证在N个球中找出坏球并知道其轻重,至少需要称H次。

  假设N≠2,我们有
2)如果N<(3H-1)/2,那么称H次就足够了;
3)如果N=(3H-1)/2,那么称H次足以保证找到坏球,但不足以保
 证知道坏球比标准球轻还是重;
4)如果N=(3H-1)/2,而且还另有一个标准球,那么称H次足以保
 证找到坏球和知道,知道坏球比标准球轻还是重。

zhanghk 2002-12-13
  • 打赏
  • 举报
回复
Cybergate(Cybergate) 说得对,到底考什么,要是没看过当时想的话估计就歇菜了
mifeng2 2002-12-13
  • 打赏
  • 举报
回复
lastcsdn2166(床边有一窗户,我觉的跳下去好简单)
写的很对,
不过
A: 1 9 10 11(9 10 11 为好的球)
B: 2345 C:6789(应该是6,7,8,12)
BigLeo 2002-12-13
  • 打赏
  • 举报
回复
将下面的讲解放在记事本中查看
====================================
说明:(关键在第二步的换球)
1、称量中,\、/、= 分别表示左轻右重、右轻左重、同样重。

2、括号中的数字表示球的编号。目的球:与其它球不一样重的球。

3、|________|表示对两组球进行称量。
=Step One=========================+=========+=======================
把球分成三组,选其中二组称: | |
    (1 2 3 4) (5 6 7 8) |     |   (9 10 11 12 13)
    |___________| | |
| |
    结果一:\    |结果二:/|结果三:=
判断:或是目的球在1 2 3 4 |判断:与结|判断:目的球在
中,且是轻球;或是目的球在 |果一类同;|9 10 11 12 13中 
    5 6 7 8中,且是重球。 |在此省略 |
=Step Two=========================+=========+=======================
   (1 2 9) (5 3 4) | |(1 2 3) (9 10 11)
    |________| | | |________|
结果一:\  结果二:/ 结果三:=| | \   / =
判断    判断 判断 | |目的球 目的球 目的球  
目的球在  目的球在 目的球在| |在9 10 在9 10 在12  
1 2 5三个  3 4中,并  6 7 8中 | | 11中, 11中, 13中。
球中,或  且是一个  且是一个| |且是一 且是一
是1 2中有  轻球    重球。 | |重球  轻球
一个球轻, | |
或是5球重 | |
=Step Three==+=========+==========+=========+=======================
(1) (2) | (3) (4) | (6) (7)| |(9)(10) (9)(10) (9)(12)
|___| | |___| | |___| | | |___| |___| |___|
| | | |
 \ / = | \ / | \ / =| | 这儿不用再讲了吧
目 1 2 5 | 3 4 | 7 6 8| |
的 轻 轻 重 | 轻 轻 | 重 重 重| |
球 |   | | |
=============+=========+==========+=========+=======================
lastcsdn2166 2002-12-13
  • 打赏
  • 举报
回复
程序员杂志上面与我的答案一样! 大家,请仔细看完!
lastcsdn2166 2002-12-13
  • 打赏
  • 举报
回复
我靠,楼上的大家,好好看看我的12个球的观点
我的绝对是正确的(早就知道这个题目里的坏球是不知到轻重问题的)

qh2871 2002-12-13
  • 打赏
  • 举报
回复
我个人认为
如够不知道轻重话4次搞定,分 4,4,4乘量,same则再与另一组2,2量,same
则从一样的组中选一个与不同的量可,
diff从重复搞定
puddings 2002-12-13
  • 打赏
  • 举报
回复
聪明的一猪写的对

不能盲目地就等分比较,因为不知道不一样的那个球是lighter or heavier
加载更多回复(50)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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