那谁的技术博客

感兴趣领域:高性能服务器编程,存储,算法,Linux内核
随笔 - 210, 文章 - 0, 评论 - 1183, 引用 - 0
数据加载中……

称球问题

题目:有12个小球,其中有1个是不合格的,其他11个都合格,请你找出来.要求只能要天平称3次,并指出不合格的小球是比合格的重还是轻.

CU上的斑竹win_hate已经给出了这个问题的一个算法,我把它贴在这里:

设数据分为三组 A[1..4],B[1..4],C[1..4]

1 如果  sum(A, 1..4== sum(B, 1..4// 目标在 C 中
  1.1 如果 sum (A, 1..3== sum (C, 1..3)
           目标为 C[
4] 再作一次比较可知轻重,退出。
  
1.2 如果 sum (A, 1..3> sum (C, 1..3)
           目标较轻,比较 C[
1], C[2] 可推出目标之索引,退出。
  
1.3 如果 sum (A, 1..3< sum (C, 1..3) 同1.2

2 如果 sum(A, 1..4> sum (B, 1..4// 目标不在 C 中,若目标在A中,则重,在B中,则轻。
  2.1  如果 A[3]+B[3+B[4== A[4+ B[1+ B[2]
        目标在 A[
1]A[2] 中,且目标较重,比较 A[1], A[2] 可得目标索引,退出。
  
2.2  如果 A[3]+B[3+B[4> A[4+ B[1+ B[2]    // (X)
        2.2.1 如果 B[1]!=B[2], 则目标在 B 中,较轻,从比较结果可知索引,退出。
        
2.2.2 如果 B[1]==B[2], 则目标不为 B[1], B[2]。
        同时,目标也不为 A[
4],因为若目标在A中,必定较重,这与(X) 相悖。
        目标不为 B[
3], B[4],因为若目标在 B 中,必定较轻,这与(X) 相悖.
        故目标为 A[
3](其实此时(X) 可化为A[3]>A[4] 了), 退出。
  
2.3 如果 A[3]+B[3+B[4< A[4+ B[1+ B[2]    
        同 
2.2 

3 如果 sum(A, 1..4> sum (B, 1..4)  
        同 
2

q.e.d

原文的链接:
http://bbs.chinaunix.net/viewthread.php?tid=644659&fpage=1&highlight=



posted on 2006-02-26 20:19 那谁 阅读(806) 评论(2)  编辑 收藏 引用 所属分类: 算法与数据结构

评论

# re: 称球问题  回复  更多评论   

:) 这题做过
2006-03-22 12:49 |

# re: 称球问题  回复  更多评论   

确实分三组。
2009-09-30 00:23 | godson

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理