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 “<”

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个经典的问题,可以使用二分法来解决。具体思路如下: 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、付费专栏及课程。

余额充值