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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sam9204 中级黑马   /  2015-5-14 11:49  /  3441 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

最佳答案

查看完整内容

public class Main { private double TotalHeight = 100; private double CurHeight = 50; public void drop(int times) { if ((times - 1) == 0) { return; } setTotalHeight(getTotalHeight() + 2 * getCurHeight()); setCurHeight(getCurHeight() / 2); drop(times - 1); } public double getTotalHeight() { return TotalHeight; } public void setTotalHeight(double totalHeight) { TotalHeight = totalHeight; } publ ...

8 个回复

倒序浏览
public class Main {
private double TotalHeight = 100;
private double CurHeight = 50;

public void drop(int times) {
if ((times - 1) == 0) {
return;
}

setTotalHeight(getTotalHeight() + 2 * getCurHeight());
setCurHeight(getCurHeight() / 2);

drop(times - 1);
}

public double getTotalHeight() {
return TotalHeight;
}

public void setTotalHeight(double totalHeight) {
TotalHeight = totalHeight;
}

public double getCurHeight() {
return CurHeight;
}

public void setCurHeight(double curHeight) {
CurHeight = curHeight;
}

public static void main(String[] args) {
Main main = new Main();
main.drop(2);
System.out.println("Total height is " + main.getTotalHeight());
System.out.println("Current height is " + main.getCurHeight());
}
}
回复 使用道具 举报
  1. public class Question3 {
  2. /*需求:一球从100米高度自由落下,每次落地后反跳回原高度的一半;
  3. * 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  4. */
  5.         public static void main(String[] args) {

  6.                 double meter=getMeter(100.0,10.0);
  7.                 System.out.println(meter); //运行结果:0.09765625
  8.                 double sum_meter=getSumMeter(100.0,10.0);
  9.                 System.out.println(sum_meter);  //运行结果97.0

  10.         }
  11.         /**
  12.          * 定义一个方法,根据指定高度、落地次数,确定其反弹多高
  13.          * @param height 高度
  14.          * @param num 落地次数
  15.          * @return 经num之后,球最终所在高度
  16.          */
  17.         public static double getMeter(double height, double num) {
  18.                 if(num<0.0)
  19.                         return -1;
  20.                 if(num==0.0)
  21.                         return height;
  22.                
  23.                 for(int i=0;i<num;i++){
  24.                         height=height/2;
  25.                 }               
  26.                 return height;
  27.         }
  28.         /**
  29.          * 定义一个方法,根据指定高度、落地次数,确定其反弹多高
  30.          * @param height 高度
  31.          * @param num 落地次数
  32.          * @return 经num之后,球经过的距离
  33.          */
  34.         public static double getSumMeter(double height, double num) {
  35.                 if(num<0.0)
  36.                         return -1;
  37.                 if(num==0.0)
  38.                         return 0;
  39.                 int sum=0;
  40.                 for(int i=0;i<num;i++){
  41.                         height=height/2;
  42.                         sum+=height;
  43.                 }               
  44.                 return sum;
  45.         }
复制代码
回复 使用道具 举报
本帖最后由 464431789@qq.co 于 2015-5-14 13:33 编辑

/*
        需求:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在

第10次落地时,共经过多少米?第10次反弹多高?

        分析:1因为需要计算球的高度、运动的长度、反弹次数,因此需要定义high,distance,count
2.第一次落地时,球运动的长度为其当前自由落体的高度 distance = high
                  2.第一次反弹的高度为 high = high/2,
                  3.第二次落地时,球运动的长度为其之前的运动的长度加上反弹的高度加上当前自由落体的高度 ,反弹的次数加1
                                distance = distance+high+high;
                                count++;
                  4.第二次反弹的高度为 high = high/2;
                  4.第二次落地时,球运动的长度为其之前的运动的长度加上反弹的高度加上当前自由落体的高度 ,反弹的次数加1
                                distance = distance+high+high;
                                count++;
                  6.经过10次落地,共经过多少米?反弹高度是多高?
                        for(int i = 1;i <= 10;i++) {
                                
                                if(i==1) {
                                        distance = high;
                                }else {
                                        high = high/2;
                                        distance = distance+high*2;
                                        count++;
                                }
                        }
*/

class FreeFall {
        public static void main(String[] args){
                //因为需要计算球的高度、运动的长度、反弹次数,因此需要定义high,distance,count
                double high = 100;//这是球每一次自由落体的高度,并给第一次自由落体的高度赋初值
                double distance = 0;//这是记录球运动的长度
                int count = 0;//这是记录球反弹的次数
               
                //经过10次落地,共经过多少米?反弹高度是多高?
                for(int i = 1;i <=10 ;i++) {
                        if(i==1) {
                                distance = high;
                        }else {
                                high = high/2;
                                distance = distance+high*2;
                                count++;
                        }
                }
                System.out.println("共经过"+distance+"米");
                System.out.println("第"+count+"次反弹的高度是:"+high+"米");
        
        }
}
回复 使用道具 举报
第一落地为100,此时只需要一次,
当第二次反弹到50米并落下来时,相当于2个50
同理第三次反弹到25米并落下来时,相当于2个25
.. ...
这应该很好算了吧
回复 使用道具 举报
本帖最后由 anoofeng 于 2015-5-14 22:57 编辑

class  fredomH
{
        public static void main(String[] args)
        {//设置高度h=100;反弹次数s=10;l为路程常;rh为反弹高度;
                double h=100;
                int s=10;
                double l=h,rh=h;

                for (int i=1; i<=s ; i++ )
                        {
                        rh*=0.5;
                        l+=(2*rh);
                        }                System.out.println("球自由落下一共经过"+l+"米。");
                System.out.println("球第"+s+"次反弹高度为"+rh+"米。");
        }
}

如果要控制高度和次数的话可以自己传入数字:


import java.util.Scanner;   //导包
class  fredomH
{
        public static void main(String[] args)
        {
                 //创建对象
                Scanner sa=new Scanner(System.in);
                System.out.println("请输入自由落体的高度:");
                 //引用
                Scanner sc=new Scanner(System.in);
                System.out.println("请输入自由落体的反跳次数:");
                double h=sa.nextDouble();
                int s=sc.nextInt();

                double l=h,rh=h;
               
                        if (s==0)
                        {
                                l=h;
                                rh=0;
                        }else{
                                for (int i=1; i<=s ; i++ )
                                        {
                                        rh*=0.5;
                                        l+=(2*rh);
                                        }
                        }
                        System.out.println("球自由落下一共经过"+l+"米。");
                        System.out.println("球第"+s+"次反弹高度为"+rh+"米。");
        }
}


回复 使用道具 举报
楼上的思路不错。。。。。
回复 使用道具 举报
受教了,有些思路了。集思广益啊
回复 使用道具 举报
受教了,楼上思路很棒。果然好的思路很重要
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马