首页 > 代码库 > 腾讯暑期实习笔试题 有趣的梅式砝码问题
腾讯暑期实习笔试题 有趣的梅式砝码问题
无意间看到这样的一个题目,题目内容是:
用4个砝码称出1到40的重量的物体,这四个砝码的重量分别是多少??
此处有一点必须注意,很多人一拿到题目(包括我自己),一下子就想到了二进制的解法,可是立刻就发现,二进制的40需要的位数大于4位,也就是说不靠谱。
更加值得注意的是,二进制的方法用在此处,相当于只是将砝码做加法,并未考虑减法,见过天平的同学都知道,砝码是可以和物体放在一边的。因此是可以做减法的。
看了大多数人的题解,提到了,这是一个“梅式砝码”的问题,首先:作出如下假设:(有点类似数学归纳)
假设现在有a1,a2,a3,....,am个砝码,移动可以称出 (1 到 a1+a2+a3+....am)这些重量的物体,
那么再增加一个重量为 b = (a1+a2+...+am)*2+1 的物体,那么就可以称出重量为 1 到 (a1+a2+...+am)*2+1 的物体。
虽然这个结论很显然,但是做一个小推断吧:
首先,通过 这 a1,a2,a3,....,am m个砝码,可以得到数字 1,2,3 , 。。。 , (a1+a2+...+am)。
其次,加入 b 之后,可以得到的重量: 1,2,3 , ..., (a1+a2+...+am)依然可以得到。
接着利用b分别去减上述得到的重量,
可以得到:
b - 1 =( a1 + a2 + ... +am)*2;
b - 2 =( a1 + a2 + ... +am)*2-1;
..... ,
b - (a1+a2+...+am) = (a1+a2+...+am)+1;
将这些重量逆序。便是 (a1+a2+...+am)+1 到 ( a1 + a2 + ... +am)*2 +1 的重量了。
显然,可以通过上述递推式得到答案为 1,3,9,27
关于此问题的一些思考:
当我把这道题问其他人的时候,一致想到的都是进制相关的问题,也就是说40用二进制表示需要的位数是大于4的,那么不能使用二进制来考虑,他直接脱口而出答案,让我特别惊讶,他的理由是:不能使用二进制,那就是用3进制啊。
这难道只是巧合吗?至今想不明白。。。既然所有的进制都能表示所有的整数,那么为什么其他进制不可以呢。唯一能够想到的限制便是这里的砝码的个数只能是1,也就是说在该进制表示下,各个位上的数字只能是1,不论是加法或者是减法。
很值得思考的问题~~