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