昨天一直在车上。
杨大哥和小曹确实很牛。
下面我说下我的想法:
假如现在只有一个1g的砝码,那么我们只能称1g的重量,我们把能称的重量集合记为S, 现在的S1 = {1}。
现在给了我另外一个砝码m(m!=1)克。那我们能称的重量为1, m-1, m , m+1, 若m-1!=1,那么我们就能称4个重量,S2 = {1, m-1, m, m+1},比如说给的m=3,那么我们能称的重量为S2 = {1,2,3,4},很显然,在某个时刻,只能取S中的一个值,若取了1和3相当于取4。即S2 = {S1, m-S1, m, m+S1}.
现在我们有了1g,3g的砝码,那么再给我一个砝码m,我能称的重量最多能有多少个呢?肯定是1,2,3,4,m-4,m-3,m-2,m-1,m,m+1,m+2,m+3,m+4,若m=9,则连续称的重量为S3= {1,2,3,4,5,6,7,8,9,10,11,12,13}。即S3 = {S2,m-S2, m, m+S2}。
不难看出,这里有个规律: 假设手头上有m个砝码,可以称的连续重量为n个,那么再给一个砝码,此砝码重量为2n+1,那么能称的连续重量为3n+1个,即已经能称的1到n的重量,加上新加的砝码2n+1依次减去1到n的重量得到的n+1到2n的n个重量,再加上新加的砝码本身的重量2n+1,再加上2n+1依次加上1到n的重量得到的2n+2到3n+1的n个重量。此时砝码个数为m+1。
m个砝码能称的最多重量为(3^m-1)/2。第m个砝码的重量为3^(m-1)。
程序也很好写。
再次膜拜杨大哥和小曹。
[
本帖最后由 demonleer 于 2012-7-6 10:09 编辑 ]