黑马程序员技术交流社区

标题: 求解自由落体题 [打印本页]

作者: ╄Tracyぺ    时间: 2014-7-20 20:47
标题: 求解自由落体题
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
作者: xiaogh    时间: 2014-7-20 21:00
看这题目估计就是要用递归,我试试
作者: 爨庚轩    时间: 2014-7-20 21:06
逻辑一点也不复杂啊,要好好想想
  1.          public static void main(String args[]){

  2.                           int n = 10;
  3.                           double high = 100;
  4.                           double pathLength = 100;

  5.                           //从第二次开始计算
  6.                           for (int i=2; i<=n; i++)
  7.                           {
  8.                                   high = high / 2;   //每次高度减半
  9.                                   pathLength = pathLength + high*2;   //前一次的经过的长度加上这次高度的两倍
  10.                           }

  11.                           System.out.println("第"+n+"次反弹 "+high+"米");
  12.                           System.out.println("共经过"+pathLength+"米");
  13.                
  14.         }
复制代码

作者: xiaogh    时间: 2014-7-20 21:33
  1. public class Test {
  2.         
  3.     public static void main(String[] args) {
  4.             
  5.             Test t = new Test();
  6.             for(int i = 1; i <= 10; i++){
  7.                     P.rintln(t.getHeight(i, 100));
  8.                     P.rintln(t.getJourney(i, 100));
  9.             }
  10.             
  11.     }
  12.    
  13.     public double getJourney(int n, double temp){                //获取走过的路程
  14.             
  15.             if(n == 1){
  16.                     return 1.5 * temp;
  17.             }
  18.             return getJourney(n - 1, temp / 2) + temp * 1.5;
  19.     }
  20.    
  21.     public double getHeight(int n, double height){                //获取高度
  22.             
  23.             if(n == 1){
  24.                     return height / 2;
  25.             }
  26.             height = height / 2;
  27.             return getHeight(n - 1, height);
  28.     }
  29. }
复制代码

2了,递归还是不熟- -,花了这么久时间
作者: 郑飞    时间: 2014-7-20 22:39
本帖最后由 郑飞 于 2014-7-20 23:34 编辑

class Distance
{
        public static void main(String args[])
        {
                int n=2;//落地次数
                double H=100;//第一次落地的高度
                double S=100;//第一次落地的总的运动距离
                for (int i = 2;i<=n ;i++ )//从第二次落地开始循环 到第n次
                {
                H = H/2;//每次的高度是前一次的1/2;        
                S =S + 2*H;//总的运动距离=已经运动的距离+该次运动距离(两个弹跳高度的距离2H)
                }
                System.out.println("第"+n+"次落地时总的运动距离是:"+S+"米!");
                System.out.println("第"+n+"次反弹高度"+H+"米!");
        }
}
和2楼惊人的相似 木有草席哦


作者: xiaogh    时间: 2014-7-20 22:54
郑飞 发表于 2014-7-20 22:39
class Distance
{
        public static void main(String args[])

发现你们的计算结果和我的有出入,你们是不是不将第十次反弹的高度算到总路程中?
我觉得一次完整的弹跳应该算落下加弹起的半个高度吧。不然这就和你们计算前9次的路程的规则不一样吧
作者: 郑飞    时间: 2014-7-20 23:20
xiaogh 发表于 2014-7-20 22:54
发现你们的计算结果和我的有出入,你们是不是不将第十次反弹的高度算到总路程中?
我觉得一次完整的弹跳 ...

题目写的很清楚啊:求它在 第10次《落地时》,共经过多少米?
作者: ╄Tracyぺ    时间: 2014-7-21 23:52
爨庚轩 发表于 2014-7-20 21:06
逻辑一点也不复杂啊,要好好想想

为什么要从第2次开始算
作者: fantacyleo    时间: 2014-7-22 00:06
这是我写的http://bbs.itheima.com/forum.php ... mp;page=1#pid868409 看到好多问这题的,ios区也有人问。与其说是编程上的困难,倒不如说是数学和逻辑上搞不清。。。
作者: 郑飞    时间: 2014-7-23 23:53
╄Tracyぺ 发表于 2014-7-21 23:52
为什么要从第2次开始算

|
|./\.
第一次落地只能算一半 第二次以后规律的是一来一回呗 如上图 ;P




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