昨天去面试,做了一个算法题目,感觉比较有意思,那就记下来吧。问: 一块草地,够18头牛吃25天,够15头牛吃31天,问:多少头牛吃草,草皮永远吃不完?
答案是9头
内心os:
一开始看到这道面试题有点懵逼。这tm也能作为算法题目? 无凭无据的题目也能用来考核算法水平?(牛胃口每天都一样吗?牛不会生病不吃饭吗? 牛难道就没有权利因为失恋了而不吃饭吗?)。于是先放着,先做其它题目,回头再去看。
其它题目写完后回过头来看这道题目,把现有的条件列出来先::
先放下成见,这道题目假设有解决,即便题目的添加给我不完善(例如没有强调牛每天的吃草量是恒定的,也没有强调草的生长速度是恒定的)。 为了给面试官一个交代,我假装这些条件都是已经被满足的条件。于是开始仔细分析题目。
题目的隐含的条件是:牛吃草的时间是无限的,所以存量可以忽略不计,内心有个声音告诉我说:需要计算出增量与消耗量的比例是问题的关键。隐约觉得可以用减法和触发解决问题。
最终问题的分析思路如下:
- 假设草皮没有放牛时的重量是total斤
- 假设一头牛每天吃草的重量是x斤
- 假设草皮的生长速度是每天y斤
则有以下等式成立:
- 等式1 total斤 + y斤 20天 = 18头牛 x斤/天 * 20天
- 等式2 total斤 + y斤 30天 = 15头牛 x斤/天 * 30天
根据加减法原则,等式两边相等,则相减也相等。 用等式2 减去 等式1,可得等式:
(total斤 + y斤 30天) - (total斤 + y斤 20天) = 15头牛 x斤/天 30天 - 18头牛 x斤/天 20天
推到可得:
y斤 10 天 = 90头牛 x斤
最终得出,y斤 = 9头牛 * x斤。 也就是草皮每天生长y斤。 9头牛刚可以吃完新生长出来的草。
牛吃草肯定不是恒定速度,草的生长速度也不是恒定的速度(阳光,空气,土壤,水分,风都是影响因素)。但是这个问题,在工业上就有可能解决实际问题。例如深圳大亚湾核电站的发电机组每天发电量,就需要类似的算法来保证安全生产。
结论:编程需要有假设,才能迸发出思想的火花。
后记:文章刚才拿给同事看,这厮说这是小学奥数的题目……。奥数果然牛。就默默翻开了小学课本,留下了悔恨的眼泪。小时候不好好学习,导致一大学生被问小学的题目……,哈哈。
有疑问加站长微信联系(非本文作者))
