码迷,mamicode.com
首页 > 其他好文 > 详细

小球称重问题~通过三次称重找出十二个小球质量不一样的小球,并判断小球轻重

时间:2020-02-21 14:21:24      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:称多   def   style   算法   算法分析   ==   描述   标准   back   

小球称重问题

一、问题描述

十二个小球进行称重,只能称三次,找出不一样的小球,并判断异球的轻重。

二、问题分析

将12个小球分成三组,将小球分别标号为1到12,分组情况如下:

  A组小球:1,2,3,4;

  B组小球:5,6,7,8;

  C组小球:9,10,11,12

情况分析:每个小球都有两种可能,一共会有24种判断结果。

三、算法分析

 

第一次,先将1-4号放在左边,5-8号放在右边。
  1.如果右重则坏球在1-8号。
    第二次将2-4号拿掉,将6-8号从右边移到左边,把9-11号放
    在右边。就是说,把1,6,7,8放在左边,5,9,10,11放在右边。
      1.如果右重则坏球在没有被触动的1,5号。如果是1号,
       则它比标准球轻;如果是5号,则它比标准球重。
        第三次将1号放在左边,2号放在右边。
          1.如果右重则1号是坏球且比标准球轻;
          2.如果平衡则5号是坏球且比标准球重;
          3.这次不可能左重。
      2.如果平衡则坏球在被拿掉的2-4号,且比标准球轻。
        第三次将2号放在左边,3号放在右边。
          1.如果右重则2号是坏球且比标准球轻;
          2.如果平衡则4号是坏球且比标准球轻;
          3.如果左重则3号是坏球且比标准球轻。
      3.如果左重则坏球在拿到左边的6-8号,且比标准球重。
        第三次将6号放在左边,7号放在右边。
          1.如果右重则7号是坏球且比标准球重;
          2.如果平衡则8号是坏球且比标准球重;
          3.如果左重则6号是坏球且比标准球重。
  2.如果天平平衡,则坏球在9-12号。
    第二次将1-3号放在左边,9-11号放在右边。
      1.如果右重则坏球在9-11号且坏球较重。
        第三次将9号放在左边,10号放在右边。
          1.如果右重则10号是坏球且比标准球重;
          2.如果平衡则11号是坏球且比标准球重;
          3.如果左重则9号是坏球且比标准球重。
      2.如果平衡则坏球为12号。
        第三次将1号放在左边,12号放在右边。
          1.如果右重则12号是坏球且比标准球重;
          2.这次不可能平衡;
          3.如果左重则12号是坏球且比标准球轻。
      3.如果左重则坏球在9-11号且坏球较轻。
        第三次将9号放在左边,10号放在右边。
          1.如果右重则9号是坏球且比标准球轻;
          2.如果平衡则11号是坏球且比标准球轻;
          3.如果左重则10号是坏球且比标准球轻。
  3.如果左重则坏球在1-8号。
    第二次将2-4号拿掉,将6-8号从右边移到左边,把9-11号放
    在右边。就是说,把1,6,7,8放在左边,5,9,10,11放在右边。
      1.如果右重则坏球在拿到左边的6-8号,且比标准球轻。
        第三次将6号放在左边,7号放在右边。
          1.如果右重则6号是坏球且比标准球轻;
          2.如果平衡则8号是坏球且比标准球轻;
          3.如果左重则7号是坏球且比标准球轻。
      2.如果平衡则坏球在被拿掉的2-4号,且比标准球重。
        第三次将2号放在左边,3号放在右边。
          1.如果右重则3号是坏球且比标准球重;
          2.如果平衡则4号是坏球且比标准球重;
          3.如果左重则2号是坏球且比标准球重。
      3.如果左重则坏球在没有被触动的1,5号。如果是1号,
       则它比标准球重;如果是5号,则它比标准球轻。
        第三次将1号放在左边,2号放在右边。
          1.这次不可能右重。
          2.如果平衡则5号是坏球且比标准球轻;
          3.如果左重则1号是坏球且比标准球重;

四、核心代码

 1 def find(balls):
 2     #1.2.3.4球和5.6.7.8球进行称重比较
 3     result = weight(balls[:4], balls[4: 8])
 4     if result==RIGHT:
 5         result=weight([balls[0],balls[5],balls[6],balls[7]],[balls[4],balls[8],balls[9],balls[10]])
 6         if result==RIGHT:
 7             result=weight(balls[0],balls[1])
 8             if result==RIGHT:
 9                 return 0,第1号球重
10             elif result==EQUAL:
11                 return 4,第5号球轻
12         elif result==EQUAL:
13             result=weight(balls[1],balls[2])
14             if result==RIGHT:
15                 return 1,第2号球重
16             elif result==EQUAL:
17                 return 3,第4号球重
18             elif result==LEFT:
19                 return 2,第3号球重
20         elif result==LEFT:
21             result=weight(balls[5],balls[6])
22             if result==RIGHT:
23                 return 6,第7号球轻
24             elif result==EQUAL:
25                 return 7,第8号球轻
26             elif result==LEFT:
27                 return 5,第6号球轻            
28     elif result==EQUAL:
29         result = weight(balls[:3], balls[8: 11])
30         if result==RIGHT:
31             result=weight(balls[8],balls[9])
32             if result==RIGHT:
33                 return 9,第10号球重
34             elif result==EQUAL:
35                 return 10,第11号球重
36             elif result==LEFT:
37                 return 8,第9号球轻
38         elif result==EQUAL:
39             result=weight(balls[0],balls[11])
40             if result==RIGHT:
41                 return 11,第12号球轻
42             elif result==LEFT:
43                 return 11,第12号球重
44         elif result==LEFT:
45             result=weight(balls[8],balls[9])
46             if result==RIGHT:
47                 return 8,第9号球重              
48             elif result==EQUAL:
49                 return 10,第11号球重
50             elif result==LEFT:
51                 return 9,第10号球重
52     elif result==LEFT:      
53         result = weight([balls[0], balls[5], balls[6], balls[7]], [balls[4], balls[8], balls[9], balls[10]])
54         if result==RIGHT:
55             result=weight(balls[5],balls[6])
56             if result==RIGHT:
57                 return 5,第6号球重              
58             elif result==EQUAL:
59                 return 7,第8号球重
60             elif result==LEFT:
61                 return 6,第7号球重
62         elif result==EQUAL:           
63             result=weight(balls[1],balls[2])
64             if result==RIGHT:
65                 return 2,第3号球轻
66             elif result==EQUAL:
67                 return 3,第4号球轻
68             elif result==LEFT:
69                 return 1,第2号球轻
70         elif result==LEFT:
71             result=weight(balls[0],balls[1])
72             if result==EQUAL:
73                 return 4,第5号球重
74             elif result==LEFT:
75                 return 0,第1号球轻

五、总结

思考:12个小球需要称三次找出坏球,那若有更多的小球的小球需要称多少次才能找出坏球呢?

 

小球称重问题~通过三次称重找出十二个小球质量不一样的小球,并判断小球轻重

标签:称多   def   style   算法   算法分析   ==   描述   标准   back   

原文地址:https://www.cnblogs.com/cyt99/p/12341087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!