c++之面试题(1)

题目

有十瓶药,每瓶里都装有100片药,其中有八瓶里的药每片重10克,另有两瓶里的药每片重9克。用一个蛮精确的小秤,只称一次,如何找出份量较轻的那两个药瓶?

解法

  • 1.分别给10个药瓶按照斐波那契数列标号: 1, 2, 3, 5, 8, 13,21, 34,55 ,89
  • 2.取出与瓶号相同的药片: 1号取出1片,2号取出2片,3号取出3片,4号取出5片.... 10号取出89片。
  • 3.计算。 一共取出了231片,理论总质量为: 231 * 10 = 2310.
  • 4.分析。 观察实际称重结果。 比如: 3号和5号瓶是分量轻的两个瓶, 那么实际重量应该是 2310-3 * 1 - 5 * 1 = 2302, 与 理论相差8克。 而数值8 为两个分量轻的药片数量之和,再结合取出的药片数量,8 = 3 + 5 . 正好与3号和5号瓶取出的药片数量相同。 这与条件中3号和5号瓶为分量轻的药瓶相吻合。

核心

斐波那契数列

posted @ 2020-12-23 17:30  mohist  阅读(190)  评论(0编辑  收藏  举报