德梅齐里亚克砝码问题

   
腾讯2014年实习生招聘笔试最后一个题很有意思:用四个砝码表示40以及40克一下的任意整数重量的物品,问这四个砝码分别是多重?     笔试没有做出来,回来后搜了答案才知道这是德梅齐里亚克砝码问题,具体是这样的。 对于这个问题,首先要意识到的问题是这四个整数a,b,c,d可以任意之间相互进行加减来表示一个数(砝码可以在天边的两边)。而这些任意加减组合,组成的数不能重合才能用这些组合表示出最多的数。 比如,如果是两个砝码1和2,他们相减为1,与1重合了,造成了冗余,就不能满足我们所要求的条件。而1和3,加减组合起来可以表示1到5之间的任何整数而不会有重复。 有了这样的概念之后,我们就可以进行后续的深入探讨了。     对于这个问题,首先我们假设已知砝码所能表示的M及以下的任何重量,下一个砝码的重量为X;     初始条件为第一个砝码为1,可以表示M=1的重量;     然后我们需要表示M’=M+1=2的重量了,这个时候,X可以等于M’-M到M’+M(因为现有的砝码可以表示1到M中的任意一个数,那么要表示M’,可以是X=M’-M=1到X=M’+M这之中任何一个数)中的任意一个数,也就是1到3中的任意一个数,都可以通过X与M的加减组合来表示出M’,那应该选择那个数呢?根据我们的前提条件,就是要求X与已有的砝码的任意加减组合不要出现重复。已有的砝码组合可以表示M与M以下的任意一个数了,所以只需要X与已有数之间的加减组合不要出现M和M以下的数就可以了,也就是说,X>2*M,那么在(M’-M到M,和M’+M)中只有X=M’+M满足条件,于是X=2+1=3;而又正是因为M之内的任何数都可以在原来已知的砝码中找到组合,所以X+M内的任意重量也是可以通过X与原来已知的砝码的组合中组成。所以X与原有的砝码1一起任意加减组合可以表示1,2,3,4这四个数;所以M=4;     继续求解,我们要求的下一个数M’=M+1=5,X可以等于(M’-M到M’+M)只的任意一个数,同样的X>2*M,所以X=M’+M=9;与现有的砝码1和3一起任意组合可以表示1到13中的任意重量;     以此类推,我们可以知道X=M’+M=2*M+1;     综上,我们得解,该问题的答案是四个砝码的重量分别是1,3,9,27.     此问题还可以做一下扩展:给你五个整数重量的砝码,你最多可以表示多少克以内的任意重量。     从上面的推导我们可以求出,如果有五个砝码,那第五个砝码重量为2*40+1=81,所以可以表示81+40=121以内的任意重量。     这是我对这个问题的理解与解决的思路,更多详细的关于德梅齐里亚克的问题请参见http://blog.csdn.net/zhu_hit/article/details/5697888     这是我第一次开博写文章,知识点的缺漏与表达的不清楚的地方,请大家多多包含,欢迎给我留言,一起探讨问题,==大牛就直接忽略我吧。

点赞