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号瓶为分量轻的药瓶相吻合。