专栏作家潘采夫在新浪微博发了一条信息

正改女儿的数学试题,有一道坑爹题这样的:在火炉上烤饼,饼的两面都要烤,每烤一面要2分钟,炉上只能同时放2张饼。要烤5张饼,至少需要()分钟?标准答案是10分钟,但我算来算去至少得12分钟,而女儿答的是5分钟,到底哪个对呢?

这道数学题目比较简单但很有趣,所以该条信息的转发数和评论数都相当多。

正确的解法是:假设每一个饼有A和B两面,5张饼编号为1、2、3、4、5,则有1A2A,3A4A,5A1B,5B2B,3B4B,一共需要烤5次,共10分钟。

把该题再扩展一下: 火炉上最多可以同时放m张饼,饼的每面需要烤t分钟,现在有n张饼,最短需要多长时间?

据说这个题目曾经在topcoder上面出现过,解法也比较简单。

我的思路是:忽略正反两面,如果有n张饼,则需要烤2n个饼面。显然,如果n <= m,则需要2t的时间。 现在来考虑n > m的情况,我们来分析两种实际例子:

当m=2, n=5,一共有10个饼面 t ●● t ●● t ●● t ●● t ●● 很明显,需要(10/2)t = 5t的时间

当m=3, n=5,一共有10个饼面 t ●●● t ●●● t ●●● t ●○○ 最后只剩一个饼面,但也需要花一个t的时间,所以总时间是4t,即取大于(5*2)/3的整数

所以我的答案是:n <= m ? 2t : ceil(2n/m) * t

补充: 题设中,t是不可分割的,那假如t是可以分割的,答案又是多少呢? n <= m ? 2t : (2n/m) t 当n > m 时,操作方法:以一秒钟(或者更短的时间)为单位,把饼放上去,烤一秒钟,然后拿下来。当时间足够小的时候,所花时间为(2n/m) t。 这时候,炉子是一种资源,还有时间片、调度算法,看来潘采夫还需要给女儿普及《操作系统》课程才行。