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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ╄Tracyぺ 中级黑马   /  2014-7-20 20:47  /  1346 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

9 个回复

倒序浏览
看这题目估计就是要用递归,我试试
回复 使用道具 举报
逻辑一点也不复杂啊,要好好想想
  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.         }
复制代码
回复 使用道具 举报
  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 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楼惊人的相似 木有草席哦

回复 使用道具 举报
郑飞 发表于 2014-7-20 22:39
class Distance
{
        public static void main(String args[])

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

题目写的很清楚啊:求它在 第10次《落地时》,共经过多少米?
回复 使用道具 举报
爨庚轩 发表于 2014-7-20 21:06
逻辑一点也不复杂啊,要好好想想

为什么要从第2次开始算
回复 使用道具 举报
这是我写的http://bbs.itheima.com/forum.php ... mp;page=1#pid868409 看到好多问这题的,ios区也有人问。与其说是编程上的困难,倒不如说是数学和逻辑上搞不清。。。
回复 使用道具 举报
╄Tracyぺ 发表于 2014-7-21 23:52
为什么要从第2次开始算

|
|./\.
第一次落地只能算一半 第二次以后规律的是一来一回呗 如上图 ;P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马