标签:称多 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