让我们先来看一个经典的数学趣题:
一工人工作7天,老板有一段黄金,每天要给工人1/7的黄金作为工资,老板只能切这段黄金2刀,请问怎样切才能每天都给工人1/7的黄金?
这题不简单吧?小心别把脑子都想破了。
在给出答案之前,先让我们看另一个简单的例子:
用天平称1~63克整数克重的物品,至少要配备几只多重的砝码(砝码只能放在天平的一端)?
没有学过二进制的人是很难想到答案的,可是如果你知道二进制数,那就不难了。我们知道二进制中只有0和1两个数字,它的各位数字的权值从小到大依次为2^0,2^1,2^2,2^3,。。。。我们用一个数的每位数字乘以其权值所得到的乘积之和来表示这个数。对于一个具有8位的二进制数来说,它可以表示的数据范围是0~2^8。
63 = 2^6 – 1 = 2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5
所以,我们只需配备2^0 =1,2^1 = 2,2^2 = 4,2^3 = 8,2^4 = 16,2^5 = 32六种不同克数的砝码各一个。
类似的题目还有如何装苹果:
现有一笔出售苹果的生意,已知客人可能需要的苹果数量肯定是1个到1000个之间,但不知道具体数字。客人要求必须全部用他提供的箱子装整箱(每个箱子都最多可以装1000个苹果),箱子一旦装成就无法再拆开重装。
你手中有1000个苹果,10个箱子,客人需要的苹果数量未知,问怎么装才能满足客人的需要?
解题的原理和上题是一样的,都是利用二进制数的记数原理。因为1000 < 2^10 = 1024,所以只要使用2^0,2^1,2^2,2^3,2^4,2^5,2^6,2^7,2^8,2^9十个数,就可以表示1到1023之间的所有数。
例如:30 = 2^1 + 2^2 + 2^3 + 2^4;75 = 2^0 + 2^1 + 2^3 + 2^6等。
但是现在苹果的总数不是1023个,而是1000个,所以第10个箱子装的苹果数不是512个,而是489个。
1000 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 489;
所以这10个箱子中每个箱子依次装1,2,4,8,16,32,64,128,256,489个苹果,就可以满足整箱提供给客人任意数量苹果的要求。
现在明白第一个题目的解法了吧?对!就是二进制。
因为7 < 2^3 = 8,所以只要使用2^0,2^1,2^2三个数,就可以表示1到7之间的所有数。那么我们只要把金条分成三份,比例为1:2:4,也就是第一刀切下金条的七分之一(设为A)