拼图:找到最小重量

时间:2010-04-07 04:25:34

标签: puzzle

我遇到了这个问题:假设有两个重量1和3,你可以称重1,2(乘3-1),3,4(乘3 + 1)(使用两侧平衡)。现在找到最小权重数,以便您可以测量1到1000。

所以答案是1,3,9,27 ......

我想知道你是如何达成这样一个解决方案意味着3的权力。思考过程是什么?

来源:http://classic-puzzles.blogspot.com/search/label/Google%20Interview%20Puzzles

解决方案:http://classic-puzzles.blogspot.com/2006/12/solution-to-shopkeeper-problem.html

4 个答案:

答案 0 :(得分:5)

以下是我解决问题的方法。假设您有权重a_1,a_2,...,a_r。

现在你可以减轻体重x你有

a_i1 + a_i2 + ... + a_ik = x + a_j1 + a_j2 + ... + a_jl

即x = Sum e_i * a_i

其中e_i为-1,0或1。

即。我们需要将每个数字写成a_i与系数1,0或-1的线性组合。

现在我们知道我们可以将基数3中的任何数字写为3的幂与系数(数字)0,1,2的组合。

类似的事实是,当我们在基数3中写一个数字时,我们也可以使用数字1,0和-1!

我们需要获得所有可能的数字这一事实导致您可能能够使用3的幂。

这个谜题是如此构造,它实际上运作良好,你可以很容易地证明它。

同样的想法可以应用于你有弹簧平衡的类似问题(即只有一个平底锅)。这里的系数是0和1,而2的幂则立即浮出水面。

另一个问题:

假设我说你有两个每个重量的副本和一个共同的平衡,并且必须权衡从1到61的所有重量。你会选择哪个重量?

答案 1 :(得分:3)

在基本层面考虑问题:

如果您想找到20公斤的最小重量,

最初:20 = 1 + 1 + 1 + 1 + 1 + 1 ....(20次)。使用二进制文件,你可以通过仅使用奇数权重将其分解为一半。

  => 1, 2, 4, 6, 8, 10...20 (for all odd weights even no.s can be "added" by 1)
      ... 2+1, 4+1, 6+1...18+1.

现在,如果还考虑“减法”,即两个平底锅都在使用,那么我们可以取3的倍数。

1     3        6        9       12        15        18        21        24        27

   2     4  5     7  8    10  11    13 14     16 17     19 20     22 23     25 26

       _________________  _________________  __________________  ___________________

我们看到所有权重都可以通过在3的倍数中加1和减1来生成

IMP:1是上面的基本单位

接下来我们可以将3作为加法和减法的基本单位,因为它可以推导出所有其他数字。因此,考虑可以采用3-6-9,9-12-15,16-17-18等集合,中间项可以作为。

因此我们有,

1     3                9                    15                   21                 27

   2     4  5  6  7  8    10  11  12  13 14     16 17  18  19 20     22 23 24 25 26

                          _________________    __________________  __________________

现在9是我们的基本单位,因为我们可以直接访问1到9之间的任何数字。如果我们加或减,我们得到18的间隙。因此,我们消除了中间项:

1     3                9                                                           27

   2     4  5  6  7  8   10  11  12  13 14  15  16 17  18  19 20  21 22 23 24 25 26

                          _________________________________________________________

现在,可以推导出从1到27的每个数字。因此27成为我们的基本单位,下一个可以访问的差距将涉及27的加法和减法,给出54。

因此,我们可以得出结论,3的幂被重复,因为3的幂之间的差总是3(n)。

因此证明了。

答案 2 :(得分:2)

定理:对于i = 0到N,你需要权重3 ^ 0到3 ^ N来覆盖值1到S(N)= sum(3 ^ i)。

证明:

  1. 您已经给出了N = 1的基本情况。
  2. 现在假设这适用于N&lt; M.对于N = M的情况,我们将具有权重3 ^ 0 = 1到3 ^ M,我们已经知道它们覆盖直到S(M-1)的值。考虑一下,通过在规模上交换每个权重的边,我们可以用相同的权重将所有负值表示为-S(M-1)。这足以证明我们可以将值S(M-1)+ 1到S(M)表示为3 ^ M + X,其中-S(M-1)<= X <= S(M- 1)。但是S(M)= S(M-1)+ 3 ^ M因此这是清楚的,条件是S(M-1)+ 1> = 3 ^ M-S(M-1)。也就是说,如果i = 0到M-1,则3 ^ M <= 1 + 2 * S(M-1)= 1 + sum(2 * 3 ^ i)。这一点对我来说似乎很清楚,但我已经喝了几杯鸡尾酒,而且证据确实不是你要求的,所以我会把这最后一步作为练习留给读者。
  3. 通过归纳,QED。

答案 3 :(得分:0)

假设您有一组权重,使用这些权重可以权衡任何数字,最多为n。现在你想扩展你的权重集来加权更多的数字,这意味着你想要权衡n + 1,n + 2等等。增加权重n + 1,n + 2,....,2n将是多余的。 系列中的下一个权重应该是((所有先前权重的总和)* 2)+ 1)

我认为你只是从基础案例1开始,然后继续努力。为了达到2,你的选择是{2,3,4 ...}。 4 - 1无法到达,2是多余的。再过一个数字后,模式出现了。