首页 > 代码库 > 【算法题】用最少的砝码称出1到100克的物品

【算法题】用最少的砝码称出1到100克的物品

题目描述:

给定一个天平,用最少的砝码称出1到100克的物品,砝码重量任选

假设物品放在右边,砝码可以放在左边或者右边,那么有:放在左边砝码的重量 = 放在右边砝码的重量 + 物品的重量,即 放在左边砝码的重量 - 放在右边砝码的重量 = 物品的重量。

假设砝码放在左边用‘+’表示,放在右边用‘-’表示。那么容易知道±aiai取‘+’、‘-’或不取,三种情况表示所有可能的情况。

给出一种方案:1、3、9、27、81(想想为什么底数取3???)

容易知道4个砝码±ai最多有34 = 81中可能的值,所以4个砝码不可能称出1到100所有的值。下面说明1、3、9、27、81的正确性。

对于30、31、32...3n,能够称出1到(3n+1 - 1)/ 2之间的任何一个值。

证明(数学归纳法):

n = 0 时能称出值 1、2。

假设 n = k - 1时成立,即对于30、31、32...3k-1,能够称出1到(3k - 1)/ 2之间的任何一个值。

当n = k时,由于30、31、32...3k-1,能够称出1到(3k - 1)/ 2之间的任何一个值,所以将每个砝码在天平中的位置对换会得到-1到-(3k - 1)/ 2,同时将3k放在左边得到(3k - 1)/ 2 + 1到3k - 1,又由于30、31、32...3k-1,能够称出1到(3k - 1)/ 2之间的任何一个值,所以将3k放在左边会得到3k + 1到3k + (3k - 1)/ 2 = (3k+1 - 1)/ 2

当n = k时成立。

得证。

容易证明,除了1、3、9、27、81,1、3、9、27、60...80也都是可行的解