天平称球问题

  笔试题目碰到了天平称球的问题,之前遇到没有细细的查阅资料,再次笔试的时候就吃亏了,这里记录下结论:

现有N个小球,其中有一个坏球不知比标准球轻还是重。我们令H={log3(2N)}。         

     1)要保证在N个球中找出坏球并知道其轻重,至少需要称H次。

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

    假设N=2,我们有
     5)如果还另有一个标准球,称H={log3(2*2)}=2次足以保证找到坏球和知道坏球比标准球轻还是重。

5)看起来有点奇怪,不过这其实很显然。如果有超过两个球,我们知道坏球是“独一无二”的那一个,总找得出来;但是如果只有两个球,一个好球一个坏球,都是“独一无二”的,如果没有一个标准球的话,我们无论如何不可能知道哪个才是好的。

    一般地,能由H次称量找出坏球并知道其轻重的最大小球数量为
      (3H-1)/2-1 = (3H-3)/2;
    能由H次称量找出坏球但不需要知道其轻重的最大小球数量为
      (3H-1)/2;
    有一标准球,能由H次称量找出坏球并知道其轻重的最大小球数量也为
      (3H-1)/2。
    为了比如说为了找出坏球并知道其轻重,则3次最多可以称12个,4次为39个,5次为120个,6次为363个等等;为了找出坏球却不需知道其轻重,则3次最多可以称13个,4次为40个,5次121个,6次364个等等——但是如果另有一个标准球,那么就可以用相同的次数来知道坏球的轻重。

  

过程构造算法:

 编码:
    知道了球数,就能算出需要称量几次;
    以这个次数作为长度,使用0、1、2排列组合进行编码,如001021、212022等等,再去掉全0、全1和全2,可知一共有个编码;
    如果在一个编码中,第一处相邻数字不同的情况是01、12或20,则我们称它为正序码,如1120021;
    否则为逆序码,如2221012;
    在长度为n的编码中,正序码和逆序码的数量相等,均为个。
赋值:
    如果把一个正序码中的0换成1,1换成2,2换成0,则它仍然是正序码;
    根据这个原理,我们把所有正序码按3个3个进行分组,如12001、20112、01220这3个就是一组;
    把正序码一组一组地分配给小球,每球一个,直到分完;
    然后把每个正序码的0换成2,2换成0,它就变成了一个逆序码,如12001变成10221;
    这样,每个小球就有了两个编码,一个正序,一个逆序,而且所有球都不重复。
称重:
    第一轮,我们把所有正序码第一位为0的小球放在天平左侧,为2的小球放在右侧,其它的放在旁边;
    如果天平左倾,记为0;右倾,记为2;平衡,记为1;
    然后是第二轮,把第二位为0的小球放在左侧,为2的放在右侧,同样记下称量结果;
    每一轮都按这个顺序进行,一共要称n次,最终结果是个n位的编码;
    如果编码等于某个小球的正序码,则这个小球比其它球重;
    如果编码等于某个小球的逆序码,则这个小球比其它球轻。

转自于:称球问题——经典智力题推而广之三

参考:小球称重问题:用天平称量几次才能找到有问题的球?

时间: 2024-10-20 08:24:04

天平称球问题的相关文章

根据问题选择N分法再看看称球问题

前面用猜数字游戏说明了二分的思想,这里再看一个常见的思维题:皇家娱乐城 12个小球,其中有一个是坏球.有一架天平.需要你用最少的称次数来确定哪个小球是坏的并且它到底是轻还是重. 这个问题是一道流传已久的智力题.网络上也有很多讲解,还有泛化到N个球的情况下的严格证明.也有零星的一些地方提到从信息论的角度来看待最优解法.本来我一直认为这道题目除了试错之外没有其它高妙的思路了,只能一个个方法试,并尽量从结果中寻找信息,然后看看哪种方案最少. 然而,实际上它的确有其它的思路,一个更本质的思路,而且根本用

天平称重

1. 给你 8 颗小石头和一架天平.其中有 7 颗石头重量是一样的,另外一个比这 7 颗略重.请问在最坏的情况下,最少要称几次,才能把这颗较重的石头找出来. 首先任取其中6个小石头一边3个进行称重,如果重量相等,再称剩下两个即可找出重的:如果不相等,取较重的一边的任意2个称重,如相等则剩下的1个是重球,如不相等则较重的是. 3+3,如果相等,剩下2个一次OK:如果不相等,较重的3个采取1+1,如果相等,剩下的1个即为结果,否则1+1中较重的1个即为结果. 2. 12球问题是指有十二个球,其中十一

枚举 天平称重

天平称重 [问题描述] 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 如果只有5个砝码,重量分别是1,3,9,27,81 则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中). 本题目要求编程实现:对用户给定的重量,给出砝码组合方案. 例如: 用户输入: 5 程序输出: 9-3-1 用户输入: 19 程序输出: 27-9+1 要求程序输出的组合总是大数在前小数在后. 可以假设用户的输入的数字符合范围1~121. 题解:所有的天平,可以分为 减,不加,加,也就

称球问题(zt)

下面说的这个问题可能大家都看到过,它是这么描述的: 现在有n(n>=2)个球,n个球外观一模一样,但是重量有区别,其中有且仅有一个球的重量比其它n-1个球要重,现在有一个天平,天平是完好无损的,问最少需要称多少次才能确定哪个球的重量较重? 初一看这个问题,感觉有点复杂,不知道从何入手.一般情况下,解决类似的问题需要简化问题,然后从中发现规律,从而解决整个问题.可以先假设有2个球,那么称一次就可以知道哪个球重:当有3个球时,也可以通过一次称量就可以确定哪个球重,因为假如放在天平上的球一样重,那么剩

2015搜狐线浪校招笔试题-12个物体天平称3次

有12个物体(鸡蛋.铁块等),形状.大小均相同,其中有11个物体重量相同,另外1个与其他不同,现在有一个天平,请你称3次找出不同的一个物体(不同的物体重量是比另外11个轻还是重未知). 解题: 将12个物体从1-12依次编号.

2015搜狐和新浪学校招生笔试题-12天平称一个对象3次要

有12对象(鸡蛋.铁等),形状.所有相同尺寸.其中,11体重相同,其他1两个不同.今天有一个平衡点,你说3找点时间,不同的对象(物体的重量比另一个不同11一个轻或重未知). 求解: 将12个物体从1-12依次编号. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd29vZHk4OTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 版权声

读《暗时间》总结

国庆花了一两天的时间把刘未鹏的<暗时间>粗略地读了一遍,该书是思维学和方法论方面的一本通俗读物,整本书给我带来的最重要的收获就是: 1.我们要无时不刻地思考,睡前思考,走路思考,饭前饭后思考,上厕所也要思考,要时刻留一两个问题在脑袋里,让你的小CPU时刻保持运转状态,充分利用好"暗时间",这样你就会比别人多出一大块的生命.表面上看,时间对于每个人来说都是公平地平等的,但是如果你充分利用好"暗时间"的话,你的时间将是别人的数倍之多. 2.你要比别人多往前看

天平砝码称重量

源blog地址http://onlywish.me 用天平称重量 有1,3,9,27,81的砝码 输入一个121以内的数.求出称重方法: 如:输入10 显示 9+1: 输入 7  显示 9-3+1; 下面是答案(自己写的,非标准): #include <stdio.h> #include <math.h> int sum = 0; int array[5] = {1,3,9,27,81}; int count[5] = {1,4,13,40,121}; char jo[2][2]

12个球中取重量异常的问题

题目:有十二个乒乓球特征相同,其中只有一个重量异常,现在要求用一部没有砝码的天平称三次,将那个重量异常的球找出来. 高中时候遇到过,当时好一阵想,今天逛百度贴吧时候有看见有人在争论,故画点时间整理一下思路: