一、一个经典的问题:
你让工人为你工作 7 天,给工人的回报是一根金条。金条平分成相连的 7 段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?
二、思路:
1. 金条是可以找钱的,如工人有一段金条,付当天工钱时可以用2段去换工人的一段,不能说工人拿到金条了马上拿去花了,那就没得玩了
2. 金条只允许弄断2次,也就是说最后只有3段金条
3. 因为工人每天拿到的工钱是递增的,也就是说工人会依次拿到 1, 2, 3 ... 7段金条
4. 因此,这个问题可以转化为:如何用3个数进行组合后,可以得到 1, 2, 3 ... 7,而且这3个数其中的任何一个在某一天可能在我这里,也可能在工人哪里,如果我们用1表示某个数在我这里,用0表示不在我这里,根据数理逻辑,这刚好就是一个二进制数表达的问题:
这3个数就是:
1 1 1
我们发现3位的二进制可以表达的数字是 0 ~ 111,也就是0 ~ 7,刚好满足题目的要求,那么接下去就简单了,3位二进制的每一个位即表示一段金条的长度,该位为1,表示此段金条在我这里,为0表示则付给工人了。
订阅专栏 解锁全文
231

被折叠的 条评论
为什么被折叠?



