论文网
English Papers
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
经典面试问题:12小球问题算法

[科技论文网] http://www.scipapers.com    2007-12-01  

    经典面试问题:12小球问题算法

    作者:      来源:zz     发表时间:2006-10-15     浏览次数: 3366      字号:    

    IQ:

     

    12 颗玻璃球大小一样, 不知道哪一颗重了, 还是轻了. 请用天平秤秤3, 把其中的一颗重量不均匀的玻璃球取出来!

     

    高手的给的答案

    先把小球平均分成三组每组4个。

    1)第一次把其中两组放到天平两边,若平衡,这种情况较简单,这里不说了,

    2)若不平衡,假定轻的是左边的四个小球,编号为1234号;重的是右边,编号为5678,第三组(没放在天平的)编号为912

    3)第二次把1259放在天平左边,34610放右边若平衡,则不同的小球是78,而且比一般球重,第三次容易区分。

    4)若天平还是左轻右重, 则不同的小球是126之一,第三次也容易区分,只需把12秤出轻的便是,否则是6,若天平变为左重右轻,则不同的小球为345之一,方法与上同。

     

     

    高手的给的答案

    先把小球平均分成三组每组4个。

    1)第一次把其中两组放到天平两边,若平衡,这种情况较简单,这里不说了,

    2)若不平衡,假定轻的是左边的四个小球,编号为1234号;重的是右边,编号为5678,第三组(没放在天平的)编号为912

    3)第二次把1259放在天平左边,34610放右边若平衡,则不同的小球是78,而且比一般球重,第三次容易区分。

    4)若天平还是左轻右重, 则不同的小球是126之一,第三次也容易区分,只需把12秤出轻的便是,否则是6,若天平变为左重右轻,则不同的小球为345之一,方法与上同。

     

     

    正解。不过此题答案不唯一。大家可以继续想。

    核心思路是,每次称重,不管天平平衡与否,都能尽可能多的排除掉一些可能。

    和海盗问题一样,这也是MS前几年的面试题之一

     

     

     

     

    太容易了 分成三组!

    A{a0,a1,a2,a3}

    B{b0,b1,b2,b3}

    C{c0,c1,c2,c3}

    if(A==B)

    {

       D' = {c0,c1,c2}

            if ( D' = = {a0,a1,a2} ) {

                    c3 is bad ball;

             } else if( D' > {a0,a1,a2} ){                

                     D" = {c0 ,a0};

                     D"" = {c1,a1};

                      if( D" = = D"" ){

                        c2 is bad ball;

                      }else{

                            if( D" > D"" )

                               c0 is bad ball;

                            else

                               c1 is bad ball;

                     }

            }else if( D' < {a0,a1,a2}) {

            D" = {c0 ,a0};

                D"" = {c1,a1};

                if( D" = = D"" ){

                   c2 is bad ball;

                }else{

                    if( D" > D"" )

                     c1 is bad ball;

               else

                     c0 is bad ball;

            }

    }

     

    if(A > B){

    D' = {a0,a1,b2,c3};                  ‘选球过程中还有a3,b3,b1没有选

    D" = {b0,c1,a2,c0};

    if( D' == D" ){             

         {a3,b3}{c0,c1}比较

         if( > )

               a3 is bad ball

         if( < )

               b3 is bad ball

         if( = )

               b1 is bad ball           

    }

     

    if(D > D" ){        ‘假设坏球大,那么就在a0,a1当中;假设坏球小,那么就在b0

       坏球在a0,b0,a1之间

       {a0,b0}{c0,c1}比较

       ... if( > )

               a0 is bad ball

         if( < )

               b0 is bad ball

         if( = )

               a1 is bad ball 

     

    }

    if(D'< D" ){

    a2,b2任一,和标准c0比较   ‘假设坏球大,那么就在a2当中;假设坏球小,那么就在b2

         if a2>c0

    a2 is bad ball 

    else

    b2 is bad ball

    }

    }

     

     

    if(A < B){

    D' = {a0,a1,b2,c3};                  ‘选球过程中还有a3,b3,b1没有选

    D" = {b0,c1,a2,c0};

    if( D' == D" ){             

         {a3,b3}{c0,c1}比较

         if( > )

               b3 is bad ball

         if( < )

               a3 is bad ball

         if( = )

               b1 is bad ball            

    }

     

    if(D < D" ){        ‘假设坏球小,那么就在a0,a1当中;假设坏球大,那么就在b0

       坏球在a0,b0,a1之间

       {a0,b0}{c0,c1}比较

       ... if( > )

               b0 is bad ball

         if( < )

               a0 is bad ball

         if( = )

               a1 is bad ball 

     

    }

    if(D'> D" ){

    a2,b2任一,和标准c0比较   ‘假设坏球大,那么就在b2当中;假设坏球小,那么就在a2

         if a2>c0

    b2 is bad ball 

    else

    a2 is bad ball

    }

    }

     

     

    这题我两年关就做过了.我来回答.开始同ziqing_1_2_3一样

     

     

    先把小球平均分成三组每组4个。

     分别是  组一, A.B.C.D

             组二, 1.2.3.4 

             组三, a.b.c.d

     先用第一组和第二组称.平衡就不用说了(重或轻的球在组三中).

    先假设.组一重.组二轻.

     第一组和第二组不平衡.说明组一和组二中有一个球或重或轻.

     再用A.B.1 C.D.2去称(这后面就要用逻辑去想了) 平衡那是在3.4球不同.

     不平衡.

     1.平衡有没有出现交换.那么 A.B 中有一球重. 2 

     2.平衡发生交换那么 C.D. 中有一球重. 1

    再用A.2C.1a.b.就可以推理出不同重量的球

     

     

    3个以下   三的一次方   1算出  1V1

    9个以下   三的二次方   2算出  3V3   1v1

    27个以下  三的三次方   3算出  9V9   3V3  1v1

    81个以下  三的四次方   4算出  27v27 9V9   3V3  1v1

    .....

    以下类推..

     

    12个的合理算法,分为9,3,0

    9中的话,2次可算出  (9再分3,3,3 )

    3中的话,1次可算出

     

    12个最多三次可算出结果

    以上所有对半分的答案肯定不是最合理的,些题考的只是一个算法,12只是一个特例,有没有考虑过:27,24,81....20003333个的情况呢...

     

    3的次方是此题的规律...

        来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

  
经典面试问题:12小球问题算法
下面没有链接了     图像几何变换插值算法
最新论文
·[程序设计]经典面试问题:12小球问题算法
·[程序设计]图像几何变换插值算法
·[程序设计]C算法—堆排序
·[程序设计]人机博弈程序实现
·[程序设计]A*算法Python实现
·[程序设计]森德拉姆素数筛法
·[程序设计]一种快速图形拉伸算法
·[程序设计]扫描线种子填充算法
·[程序设计]C语言实现集合的交,并,差
·[程序设计]采用链式存储结构构造哈夫曼树
 
 

搜索论文

Google
论文分类

论文网 论文发表网 论文 免费论文网 找论文网 毕业论文 中国论文网 英语论文 百度论文 聘教网 易搜
 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com