黑马程序员技术交流社区

标题: 求数学分析 [打印本页]

作者: xwh1230    时间: 2014-7-20 22:03
标题: 求数学分析
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
这个题不好分析,求高手一个分析思路
作者: 爨庚轩    时间: 2014-7-20 22:07
for循环可以算出每次的高度,经过的长度等于当前高度的两倍加上前一次的长度
作者: fantacyleo    时间: 2014-7-20 22:31
本帖最后由 fantacyleo 于 2014-7-20 22:32 编辑
  1. double totalDistance; // 经过的总距离
  2. double height = 100; // 反弹高度,初始值为100

  3. // 第一次落地经过距离为100米
  4. totalDistance = 100;

  5. // k>=2时,第k-1次落地到第k次落地之间经过的距离为第k-1次落地后反弹高度的2倍
  6. for (int k = 2; k <= 10; k++) {
  7.     totalDistance += height;
  8.     height /= 2;
  9. }

  10. System.out.println("第10次反弹时经过的总距离" + totalDistance);
  11. System.out.println("第10次反弹高度" + height);
复制代码

作者: 0小菜鸟0    时间: 2014-7-20 22:33
本帖最后由 0小菜鸟0 于 2014-7-20 22:47 编辑
  1. class  Demo15
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 double x = 100;//初始高度
  6.                 double k = x;//第一次落地高度经过的高度
  7.                 int num = 1;//记录落地次数
  8.                
  9.                 while (true)
  10.                 {        
  11.                         x = x/2;//每落地一次之后再弹起的高度,在直接赋值给X
  12.                         k = k + x;
  13.                         num++;
  14.                         if (num == 10)
  15.                         {
  16.                                 break ;
  17.                         }
  18.                         
  19.                 }
  20.                 System.out.println("第十次落地的高度:"+x);
  21.                 System.out.println("经过的总高度:"+ k);
  22.         }
  23. }
复制代码


作者: 0小菜鸟0    时间: 2014-7-20 22:34
本帖最后由 0小菜鸟0 于 2014-7-20 22:45 编辑

class  Demo15
{
        public static void main(String[] args)
        {
                double x = 100;//初始高度
                double k = x;//第一次落地高度经过的高度
                int num = 1;//记录落地次数
               
                while (true)
                {        
                        x = x/2;//每落地一次之后再弹起的高度,在直接赋值给X
                        k = k + x;
                        num++;
                        if (num == 10)
                        {
                                break ;
                        }
                        
                }
                System.out.println("第十次落地的高度:"+x);
                System.out.println("经过的总高度:"+ k);
        }
}
不好意思 弄成了快速回复 搞的格式不是很好看,
作者: lemon_tree    时间: 2014-7-20 22:54
我是来混经验的   哈哈哈:)
作者: Imp_x    时间: 2014-7-20 23:03
这题挺好分析的,首先只涉及两个变量,一个高度h,一个路程s。
作者: Imp_x    时间: 2014-7-20 23:11

这题挺好分析的,首先只涉及两个变量,一个高度h,一个路程s。
高度h每次递减一半,而新的路程s就等于上一次路程s加上2h(反弹+掉落)。
值得注意的是第一次h是在100m掉落,路程s=100,当第一次反弹时回到50m高度再向下掉50m,路程s也增加100(50+50)。
所以我们可以把初始h=100,s=100,即从完成第一次落地开始算,所以只要再落地9次就是我们所要求的值了,思路大概是这样。

class  Ball
{
        public static void main(String[] args)
        {
                double h = 100, s = 100;        //从100米高度落下,所以s初始值就是100
                for (int i = 1; i < 10; i++)       //因为第一次已经计算在内(s=100),所以需要在落下9次.即循环9次
                {
                        s = s + h;        //每次落下的高度就是相加
                        h = h / 2;        //每次高度都减少一半
                }
                System.out.println("经过的路程:" + s);
                System.out.println("反弹的高度:" + h / 2);
        }
}
作者: meibinlove    时间: 2014-7-21 06:29
这么多代码,我就不发代码了,你们的结果是多少?




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