题目:“有一个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;
}
}
答案://前提条件:我不知道临界到底是哪一层,所以需要根据期望值,制定一个最佳测试计划
//主要思想:第一颗棋子以一定跨度跨越式测试,第二科棋子再在前一颗棋子测试出的临界范围内由低到高逐层测试
//关键要素:计算出在期望值中,哪种跨度最有效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;
}
}
email:[email protected]
由于题目中说有两颗玻璃子,所以可以每间隔三层摔一次,如果碎了,在 n - 2 层在摔一次,如果碎了,n - 1 层为临界层,如果没碎,n + 1 层为临界层。
楼主的思路还是相当的清晰的.