努力读完小学课本才能做出来的:牛吃草算法题

TangYiMo · 2021-07-06 20:09:01 · 1414 次点击 · 预计阅读时间 2 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2021-07-06 20:09:01 的文章,其中的信息可能已经有所发展或是发生改变。

昨天去面试,做了一个算法题目,感觉比较有意思,那就记下来吧。问: 一块草地,够18头牛吃25天,够15头牛吃31天,问:多少头牛吃草,草皮永远吃不完?

答案是9头:kissing_heart:

内心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头牛刚可以吃完新生长出来的草。

牛吃草肯定不是恒定速度,草的生长速度也不是恒定的速度(阳光,空气,土壤,水分,风都是影响因素)。但是这个问题,在工业上就有可能解决实际问题。例如深圳大亚湾核电站的发电机组每天发电量,就需要类似的算法来保证安全生产。

结论:编程需要有假设,才能迸发出思想的火花。

后记:文章刚才拿给同事看,这厮说这是小学奥数的题目……。奥数果然牛。就默默翻开了小学课本,留下了悔恨的眼泪。小时候不好好学习,导致一大学生被问小学的题目……,哈哈。 在这里插入图片描述

在这里插入图片描述


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1414 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传