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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

自己网上找了个的程序。但是验证了一下不对
第一次落地经过100米第二次落地经过 100+50+50 应该是二百米
可程序运行结果不对,大神指点一下怎么改

这是网上找的 运行结果不对
import java.util.Scanner;
public class Prog10{
        public static void main(String[] args){
                System.out.print("请输入小球落地的次数:");
                Scanner scan = new Scanner(System.in);
                int h = 100;
                int n = scan.nextInt();
                scan.close();
                distance(h,n);
        }
        //小球从h高度落下,经n次反弹后经过的距离和反弹的高度
        private static void distance(int h,int n){
                double length = 0;
                for(int i=0;i<n;i++){
                        length += h;
                        h /=2.0 ;
                }
                System.out.println("经过第"+n+"次反弹后,小球共经过"+length+"米,"+"第"+n+"次反弹高度为"+h+"米");
        }
}

24 个回复

正序浏览

恩程序中  float 我都没用过~~~
回复 使用道具 举报
import java.util.Scanner;

public class BallDown {

        public static void main(final String[] args) {
                double sum = 0;
                double high = 100;
                Scanner sc = new Scanner(System.in);
                System.out.println("你想知道小球第n次落地时经过的距离和之后反弹高度,就输入数字n");
                int n = sc.nextInt();
                for (int x = 1; x <= n; x++) {
                        sum += (high * 2);
                        high /= 2;
                }
                System.out.println("第" + n + "落地时小球经过的距离是" + (sum - 100) + "m");
                System.out.println("第" + n + "次落地后反弹高度是" + high + "m");
                sc.close();
        }
}
回复 使用道具 举报
LPStone 发表于 2015-5-10 09:56
是的 但是首先你的high得先除以2,然后在乘以2,所以我把除以2放后面了 你可以运行一下看看结果 ...

嗯嗯,你是对的。
回复 使用道具 举报
第一题:
class  Deom11
{
         public static void main(String[] args)
        {
                 double num=100;
                 int i=0;
                 double a=100;
                 while (i<11)
                 {
                         a/=2;
                         i++;
                         num+=a;
                 }
                 System.out.println("第10次落地时,共经过了"+num+"米");
                 System.out.println("第10次反弹"+a+"米");
         }
}
回复 使用道具 举报
KK要有光 发表于 2015-5-9 23:38
落下时共经过多少米这一问得乘以2吧,journey=journey+high*2.因为从第一次着地弹起加落下以后每次都是相 ...

是的 但是首先你的high得先除以2,然后在乘以2,所以我把除以2放后面了 你可以运行一下看看结果
回复 使用道具 举报

落下时共经过多少米这一问得乘以2吧,journey=journey+high*2.因为从第一次着地弹起加落下以后每次都是相同的一组动作,是两段相同的距离。
回复 使用道具 举报
  1. /*
  2. 1.编程一个球从100米高度自由落下,每次落地后反跳回原高度的一半;
  3. 再落下,求它在   第10次落地时,共经过多少米?第10次反弹多高?
  4. */
  5. class Test1
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 //小球经过的路程,第一次落地经过路程确定为100米
  10.                 float  Journey = 100.0f;
  11.                 //小球弹起的高度,起始高度确定为100米
  12.                 float  High = 100.0f;

  13.                 //从第1次触地开始,到往后每一次触地的计算               
  14.                 for (int i = 2;i <= 10;i++ )
  15.                 {               
  16.                         Journey += High;//路程累加
  17.                         High = High/2.0f;//反弹高度减半
  18.                 }

  19.                 //第2次触地即是第1次反弹结束,即第10次触地即是第9次反弹结束
  20.                 High = High/2.0f;

  21.                 System.out.println("小球第10次落地时,共经过" + Journey + "米!" );
  22.                 System.out.println("小球第10次反弹" + High + "米!" );
  23.         }
  24. }
复制代码
回复 使用道具 举报
rolan 发表于 2015-5-9 17:03
楼主你这里就是逻辑错误了,分析的方式不太对
就从题面上可知是不可能超过200的 第一次落下100+100/2  第 ...

for里面代码要改成:sum+=len;
len/=2.0;
回复 使用道具 举报
浪死歌 发表于 2015-5-9 17:50
递归还没有学呀 不会用

给你看下代码,我的代码中100就直接用了,没有定义成变量,不过不影响

  1.   public static double func(int n){
  2.                         if(n==1){
  3.                                 return (double)100;
  4.                         }else{
  5.                                 return func(n-1)+(double)func(1)/Math.pow(2,n-2);
  6.                         }
  7.                 }
复制代码
回复 使用道具 举报
for(y=1;y<=10;y++)
                 {
                         double c=Math.pow(2,y-1);
                         if(y==1)
                            f=100;
                         else
                      f=200/c+f;
                  System.out.println("第"+y+"次的距离是"+f);
                 }
回复 使用道具 举报
我直接用的是 求你平方的  pow()方法
回复 使用道具 举报
yky1678 发表于 2015-5-9 17:38
分析思路如下:
     第1次落下后走的距离f(1)=100
      第2次落下后走的距离f(2)=f(1)+50+50=f(1)+f(1)/ ...

递归还没有学呀 不会用
回复 使用道具 举报
弯曲/mg抛物☀ 发表于 2015-5-9 17:44
package com.itheima;

public class Test2 {

厉害~~~
回复 使用道具 举报
我写的,看看
回复 使用道具 举报
package com.itheima;

public class Test2 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
//                次数
                int count = 200 ;
//                初始高度
                float startHigh = 30;
//                获取多少次后的高度
                getHigh(count, startHigh);
                System.out.println(getHigh(count, startHigh));
        }

        private static float getHigh(int count, float startHigh) {
//                多少次后的高度
                float endHigh = 0;
//                运动的距离,
                float S = 0;
//                临时存储
                float temp ;
                temp = startHigh;
                for(int i=0; i < count; i++) {
                        endHigh = startHigh / 2;
                        S += startHigh*2;
                        startHigh = endHigh;
                }
                System.out.println(" 球所走的距离:"+(S-temp));
                return endHigh;
        }

}
回复 使用道具 举报
看到了 h变量不能是整型的 换成double就可以了
回复 使用道具 举报
分析思路如下:
     第1次落下后走的距离f(1)=100
      第2次落下后走的距离f(2)=f(1)+50+50=f(1)+f(1)/2^0
      第3次落下后走的距离f(3)=f(2)+25+25=f(2)+f(1)/2^1
      第4次落下后走的距离f(4)=f(3)+25/2+25/2=f(3)+f(1)/2^2
      第n次落下后走的距离f(n)=f(n-1)+f(1)/2^(n-2)    (n>=2)

采用递归调用,就能够出结果了。
回复 使用道具 举报
求大牛帮改代码
回复 使用道具 举报
DonaldLove 发表于 2015-5-9 17:00
length初始值是100  再试下

试了一下length的初始值改为100后,第一次落地经过200米,第二次是250米,肯定不对。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马