问题:
烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时1小时15分钟呢?
解析:
1小时15分钟 = 1小时 + 15分钟;当一只绳子燃烧完后,点燃另外一根绳子,可以对时间进行加法。
通过1个小时的绳子,我们可以准确的得到30分钟,方法是:
对一根完整的绳子两端同时开始烧,烧完的时候就是30分钟;
同理,根据30分钟的绳子,我们可以准确的得到15分钟;
因此,我们可以这样得到1小时15分钟:
step 1:将一根完整的绳子A两端同时开始烧,另一根完整的绳子B一端开始烧;
step 2:当A烧完的时候(30分钟),我们再将B的另一端点燃,即对一根30分钟的绳子两端同时烧;
step 3:当B烧完的时候(30 + 15),我们得到了45分钟;
step 4:再如同1,我们再从两端同时开始烧一跟绳子C,烧完时候即又过去30分钟,所有总共得到:30 + 15 + 30 = 1小时15分钟
推广:
1. 通过点燃绳子两端,可以获得这根绳子二分之一的时间;
2. 当一只绳子燃烧完后,点燃另外一根绳子,可以对时间进行加法;
3. 同时点燃两根绳子,可以获得两根绳子燃烧结束的时间差,也就是对时间进行减法;
综上,也就是说,通过燃烧绳子,我们可以对时间进行除2,加法 和 减法 三种操作。
有上面关于这些运算的讨论,通过燃烧绳子,我们可以获得任意满足公式(60 * m) / (2 ^ n)的时间,其中m和n为整数。如果只考虑整数时间,由于60和2^n的最大公约数为4(另外一个思路是15分钟再分就是7.5分钟),我们可以获得的最小时间是15分钟,因为我们可以得到 m*15分钟,即可以获得任意15的倍数的时间。