复旦面试题引发的思考
其实这篇文章是今年上半年,也就是博主高一下的某个晚自习写的,写在了纸上
今天整理书房的时候翻出来了,顺便就同步到博客上吧
原题概况
有一个3L容量的桶和一个5L容量的桶
同时还有一个无限出水的水龙头
如何精确地量出4L的水?
emmm…
当时我第一眼看到这个题目时,心想“这不是小学题目吗?还面试题?搞笑呢?看我分分钟解决它!”
但是,我承认,我大意了。
做完作业后又想起这道题,便直接翻开了答案。
卧槽!怎么这么简单!
答案
方法一
- 5L桶接满水
- 5L桶往3L桶里面倒水,此时3L桶装有3L水,5L桶还有2L水
- 3L桶的水倒掉
- 5L桶的2L水倒进3L桶,此时3L桶装有2L水,5L桶没有水
- 5L桶再接满水
- 5L桶往3L桶里面倒水,此时3L桶装有3L水,5L桶还有4L水
- 结束
方法二
- 3L桶接满水
- 3L桶的水全部倒入5L桶
- 3L桶接满水
- 3L桶的水再倒入5L桶,此时3L桶还有1L水,5L桶有5L水
- 5L桶的水全部倒掉
- 3L桶的水全部倒入5L桶
- 3L桶接满水
- 3L桶的水全部倒入5L桶
- 结束
感想
看完这个答案,一拍脑子,卧槽这么简单的吗?
但是确实不容易想到
一开始就想歪了,脑子中具象出了两个桶,不自觉的就开始往物理角度开始考虑
但其实这只是一道简单数学题。。。。。。
思考
看完解答之后,我开始思考。
如果是给定两个任意正整数容量的桶,能否计算出精确测量它们容积中位数容量的水至少需要几步?
经过推理和证明,最终写下了这样的代码:
1 | def solve(a, b): |
当然,这个代码最后得出的次数仅包含以下操作:
- 两桶之间倒水
- 一个桶接满水
鸣谢
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 调皮豆干 の 博客!
评论