问题如下:
这里有十个外表一模一样的药瓶,每个瓶子里有许多一模一样的药丸,但其中有一瓶是假的。假药丸与真药丸唯一的差别是其重量。其中,真药丸每个1克重,而假药丸1.1克。现在给你一个电子称,但只给你一次称重的机会。能否找到一种方式,通过一次称重找出假药瓶?
解决思路如下:
问题升级1:
如果电子称不能超过50g (否则称重不准) 的称重怎么办?
问题解决思路:
对于第二个问题,可以不把第10瓶药纳入计算和称重范围
只称前9瓶,根据同样的逻辑推理,等于45g的话说明10号是假的,大于45g说明前面的9瓶有一瓶为假
问题升级2:
如果有两瓶假药,也只有一次称重的机会,你能否找出哪两瓶是假的?
问题升级3:
如何设计你的称重方式使得总重量尽可能小! 例如你的电子称无法容忍超过500 克的重量。
代码实现如下:
"""
这里有十个外表一模一样的药瓶,每个瓶子里有许多一模一样的药丸,但其中有2瓶是假的。
假药丸与真药丸唯一的差别是其重量。其中,真药丸每个1克重,而假药丸1.1克。
现在给你一个电子称,但只给你一次称重的机会。能否找到一种方式,通过一次称重找出假药瓶?
"""
from decimal import Decimal
class Pill(object):
def __init__(self, final_weight, pill_num):
self.pill_num = pill_num
self.final_weight = final_weight
self