A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gjggw123 中级黑马   /  2013-5-19 09:55  /  1964 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一球从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也不怎么懂..希望明白人 帮小弟详细讲解一下

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

6 个回复

倒序浏览
a=a+b*2  就是b先乘2 在加a然后赋值给a
回复 使用道具 举报
楼主先从如果问题是从第二次落地经过多少米,反弹多高来开始想。
i=2,因为作者的思路是从球第一次落地,还没弹起时,来作为计数的节点,因为不管你要算第几次落地,肯定不是停在空中,而而是落到地上就停止去计数。这里不设为1,是为了计数的方便。
a=a+b*2;其中的a楼主应该明白吧,b就是反弹的高度,但是反弹加落下,这里球要经历两个相同的距离,所以b*2,
因为题目问的是,第十次反弹多高?而在for循环中,是当i++这个语句完成后大于10才结束,所以打印的结果就成了第11次,我觉得这里在打印是改为i--会比较好。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
本来  想画个图给楼主,怎奈小弟的画图水平有限啊,还是文字说明吧。
首先要清楚 i 是用来表示什么的   
还有就是它每一次落下弹起的高度是算哪些距离

第一次落下    经过的距离a=100    弹起高度b=50

这个很好理解吧

第二次落下   经过的距离a+b+b=200 弹起高度b=25
注意此时已经体现出那个循环中的表达式了
                          a=a+2b    b=b/2
另注意这时候已经把经过的距离赋值给了a
此时的a不是落下的高度了

第三次落下 经过的距离a=a+2b  b=b/2

像我这样列举三次之后,你就会明白这个a=a+2b的含义,另外你也会发现i是代表次数,i为0和1的时候经过的距离是不符合这个表达式了,你就明白为什么i要从2开始计数了,希望你可以清晰的理解。

无11111111111111111111111111题.jpg (26.81 KB, 下载次数: 0)

无11111111111111111111111111题.jpg

点评

注意一下字体。哥们`  发表于 2013-5-19 11:29

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
gjggw123 + 3
殇_心。 + 1

查看全部评分

回复 使用道具 举报
我想这个可以结贴了。楼主怎么看
回复 使用道具 举报
bushangkoukou 发表于 2013-5-19 11:27
本来  想画个图给楼主,怎奈小弟的画图水平有限啊,还是文字说明吧。
首先要清楚 i 是用来表示什么的   
还 ...

额。。好吧。没想到是这个效果,不好意思了
回复 使用道具 举报
float n,s,h=100,i=2;
system.out.println("弹跳次数:\n");
scanf("%d",&n);
    while(i<=n)
        {
        h=h/2;
        s=h+h/2:
                  i++;
        }
system.out.println("h=%.5f s=%.5f\n",h,s);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马