题目:“有一个100层高的大厦,你手中有两个相同的玻璃围棋子。从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层面。”
答案://前提条件:我不知道临界到底是哪一层,所以需要根据期望值,制定一个最佳测试计划
//主要思想:第一颗棋子以一定跨度跨越式测试,第二科棋子再在前一颗棋子测试出的临界范围内由低到高逐层测试
//关键要素:计算出在期望值中,哪种跨度最有效public class lesson1
{
  public static  void main(String[] args)
  {  
    double expect=0.0;      //在一定跨度时得出结果须进行试验次数的期望值
    for(int step=1;step<=100;step++)
    {
      for(int margin=1;margin<=100;margin++)
        {
if(margin==1)
         expect=0.0;
         expect=expect+(double)count(margin,step)/100;
         }
         System.out.println("when the step is "+step+" you are expected to try "+expect+" times");
         }
    }
    
//在一定跨度和临界条件下,许进行试验的次数
    static int count(int margins,int steps)
       {
          int t=0;    //得出的结果
          if(steps==1)    //当跨度为1,即从1楼开始挨着去试验时
            {
               if(margins==100)
               t=99;
               else
               t=margins;
             }
            if(steps!=1)    //当跨度不为1,即按一定规律间隔数个楼层去试验时
             {
                if(margins%steps==0)    
                  t=(margins/steps+steps-1);                             
                if(margins%steps!=0)
                     {
                        if(margins<steps)                                
                           t=(1+margins);
                        else
                           t=((int)(margins/steps)+1+margins%steps);    
                       } 
              } 
               return t;         
       }
}

解决方案 »

  1.   

    本人刚学JAVA,所以很多语法不是很好,但是结果和思路还是可以在程序中表示出来的,希望大家交流
    email:[email protected]
      

  2.   

    这道题目不是这样做的,你去csdn上搜一下,有很多这道题目的解答
      

  3.   

    这道题不能这样做,既然是面试题,不会这么复杂:我的想法:  从第二层开始,每间隔一层摔一次,如果摔碎了,该 n 层的下一层 n - 1 层即为临界层。
      由于题目中说有两颗玻璃子,所以可以每间隔三层摔一次,如果碎了,在 n - 2 层在摔一次,如果碎了,n - 1 层为临界层,如果没碎,n + 1 层为临界层。
      

  4.   

    楼上的什么话,别忘了这是google的面试题.不仅要解决问题,而且要是最优解决方案!
    楼主的思路还是相当的清晰的.