9球称重问题

题目:用天平称3次找出在9个外型完全一样的球中和其他8个不一样的球,并说明它是轻还是重。

 

9球 123456789

Time1: 123 vs 456

If “=”, bad ball in 789, then Time2 7 vs 8
     If “=”, bad ball is 9, Time3 9 vs 1 (know heavy or light)
     if “<”, bad ball in 7 (light) or 8 (heavy), Time3 7 vs 1
     i f “>”, bad ball in 7 (heavy) or 8 (light), Time3 7 vs 1 

 

If “<”, bad ball in 123456, then Time2 345 vs 678
     If “=”, bad ball in 12 (light), then Time3 1 vs 2
     If “<”, bad ball in 3 (light) or 6 (heavy), then Time3 3 vs 1
     If “>”, bad ball in 45 (heavy), then Time3 4 vs 5
 
If “>”, similar as “<”

 

 

这是一个经典的称重问题,可以使用二分法来解决。具体思路如下: 1. 将分成三组,每组各取出三个球放在一边,剩下的两个球放在另一边; 2. 比较两边的重量,如果相等,则说明那个不一样的在剩下的两个球中,直接称一次即可; 3. 如果两边不相等,说明那个不一样的在较轻的一组中,将较轻的一组的三个球拿出来,再次比较重量; 4. 如果两边相等,则说明那个不一样的在剩下的两个球中,直接称一次即可; 5. 如果两边不相等,则说明那个不一样的在较轻的一组中,将较轻的一组的两个球拿出来,再次比较重量; 6. 如果两边相等,则说明剩下的那个球是不一样的,直接称一次即可; 7. 如果两边不相等,则说明剩下的那个球是不一样的,直接称一次即可。 根据上述思路,最多需要称重三次就可以找到那个不一样的。 以下是使用Python实现的代码: ```python balls = [1, 1, 1, 1, 1, 1, 1, 1, 1, 2] # 11个球,其中一个不一样 # 分三组,每组三个球 group1 = balls[:3] group2 = balls[3:6] group3 = balls[6:9] # 将剩下的两个球放在一组 group4 = balls[9:] # 比较三组的重量 if sum(group1) == sum(group2): # 不一样的在group3中 if group3[0] == group3[1]: print("不一样的是第11个球,需要称重1次") else: print("不一样的是第{}个球,需要称重2次".format(balls.index(group3[0])+1)) else: # 不一样的在较轻的一组中 if sum(group1) < sum(group2): # 比较group1和group4的重量 if group1[0] == group1[1]: print("不一样的是第3个球,需要称重2次") else: print("不一样的是第{}个球,需要称重3次".format(balls.index(group1[0])+1)) else: # 比较group2和group4的重量 if group2[0] == group2[1]: print("不一样的是第6个球,需要称重2次") else: print("不一样的是第{}个球,需要称重3次".format(balls.index(group2[0])+1)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值