黑马程序员技术交流社区

标题: 没懂 [打印本页]

作者: 想进黑马培训    时间: 2013-8-14 11:53
标题: 没懂
一球从100米高度自由落下,每次落地后又反跳回原高度的一半;再落下,求它第10次落地时共经过多少米.第十次反弹多高...

public static void main(String args[]){
   
   double a =100;
   double b =a/2;
   int i =0;
   for (i =2;i<=10;i++){
    a = a+b*2;
    b = b/2;
   }System.out.println("第"+i+"次落地经过时"+"共"+a+"米");
    System.out.println("第"+i+"次落地时"+"共反弹"+b+"米");
请问一下 为什么i=2?我没有看懂..
我算出来的结果是第11次经过和弹起 可是我算的是第10次啊 怎么搞的但是 答案还对 我有点迷糊了..还有a=a+b*2也不怎么懂..希望明白人 帮小弟详细讲解一下
作者: 曹奎    时间: 2013-8-14 12:31
本帖最后由 曹奎 于 2013-8-14 12:33 编辑

        public static void main(String[] args) {
               
                   double a =100;        //初始值 a在一百米高空落地必经过100米
                   double b =100;        //b值用来计算反弹米数
                   for (int i =1;i<=10;i++){         // i从1循环到10 用来说明是走第1次反弹到第10次反弹
                            b = b/2;                  //第一反弹  第一次循环i=1 计算第一次反弹米数  
                            a=a+b*2;                //计算共经过米数  初始的100米+反弹的50米+反弹之后落下的50米  才能计算第二次反弹 所以是反弹数*2
                            System.out.println("第"+i+"次落地时反弹"+b+"米,"+"共经过"+a+"米");        //打印每次反弹的详情
                   }                            
                            
        }

作者: 狐灵    时间: 2013-8-14 12:40
本帖最后由 狐灵 于 2013-8-14 12:49 编辑

从纯物理题的角度来考虑这个问题:
第一次落地(还没反弹)的时候走过的路程100m;弹跳一次后到达高度100/2=50m,再落下到接触地面,这时候走过的总路程(100+(100/2)*2)m;再弹跳一次到落地走过的总路程(100+(100/2)*2+(100/2/2)*2)m;...;到第十次落地的时候走过的总路程(100+(100/2)*2+(100/2/2)*2+(100/2/2/2)*2+(100/2/2/2/2)*2+(100/2/2/2/2/2)*2+(100/2/2/2/2/2/2)*2+(100/2/2/2/2/2/2/2)*2+(100/2/2/2/2/2/2/2/2)*2+(100/2/2/2/2/2/2/2/2/2)*2)m = (100+50*2+25*2+12.5*2+6.25*2+3.125*2+1.5625*2+0.78125*2+0.390625*2+0.1953125*2)m;
所以,循环控制变量从2开始到10结束,一共九次;
截止每次着地接触地面瞬间走过的总路路程:
第一次着地:(100)m;
第二次着地:(100+50*2)m;
第三次着地:(100+50*2+25*2)m;
第四次着地:(100+50*2+25*2+12.5*2)m;
第五次着地:(100+50*2+25*2+12.5*2+6.25*2)m;
第六次着地:(100+50*2+25*2+12.5*2+6.25*2+3.125*2)m;
第七次着地:(100+50*2+25*2+12.5*2+6.25*2+3.125*2+1.5625*2)m;
第八次着地:(100+50*2+25*2+12.5*2+6.25*2+3.125*2+1.5625*2+0.78125*2)m;
第九次着地:(100+50*2+25*2+12.5*2+6.25*2+3.125*2+1.5625*2+0.78125*2+0.390625*2m;
第十次着地:(100+50*2+25*2+12.5*2+6.25*2+3.125*2+1.5625*2+0.78125*2+0.390625*2+0.1953125*2)m;

OK, over~

作者: 曹满林    时间: 2013-8-14 12:42
肯定没有第0次吧,而第一次是100,并且提前已经赋值了( double a =100;
),在运算过程中也已经求和了,所以就从第二次开始了,是吧
作者: EYE_SEE_YOU    时间: 2013-8-14 12:43
  1. public static void main(String args[])
  2. {
  3.    double a =100;             //a表示第i次落地共经历的路程
  4.    double b =a/2;             //b表示第i次落地后反弹的高度
  5.    int i =0;                       //i就不用解释了吧
  6.    for (i =2;i<=10;i++)      //i=2对应i<=10,是为了说明循环的次数,循环9次即可算得第10次落地,因为i=1时a=100,所以这里直接取2便可
  7. {
  8.     a = a+b*2;                 //i=2时算得第2次落地数值,b*2表示反弹+下落
  9.     b = b/2;                     //这条语句相信不用解释了
  10. }
  11.     System.out.println("第"+i+"次落地经过时"+"共"+a+"米");
  12.     System.out.println("第"+i+"次落地时"+"共反弹"+b+"米");
复制代码

作者: penpen    时间: 2013-8-14 23:56
EYE_SEE_YOU 发表于 2013-8-14 12:43

少了一个括号;P
作者: EYE_SEE_YOU    时间: 2013-8-15 06:47
penpen 发表于 2013-8-14 23:56
少了一个括号

哈,不好意思,只是复制了楼主的代码,看得懂就行,思想大于存在嘛




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2