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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 滔哥   /  2012-7-21 00:16  /  13756 人查看  /  196 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王超 于 2012-7-21 19:05 编辑
  1. /*
  2. 1,所用到得数字:小球当前高度,反跳高度,经过的距离
  3. 2,下一次反跳高度=当前高度/2
  4. 3,用循环,实现累加
  5. */
  6. class BallHeight
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 float height = 100;//初始小球高度
  11.                 float distance = 100;//小球经过的长度
  12.                 for(int i=1;i<=10;i++)
  13.                 {
  14.                         System.out.println("第"+i+"次着地小球经过"+distance+"米");
  15.                         height = height/2;//下一次小球的反弹高度=当前高度/2
  16.                         distance = distance + height*2;//小球已经经历的距离
  17.                         System.out.println("第"+i+"次反弹"+height+"米");
  18.                 }
  19.                
  20.         }
  21. }


复制代码

result.jpg (52.57 KB, 下载次数: 33)

result.jpg

点评

没结果 不给分  发表于 2012-7-21 18:40

评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3

查看全部评分

回复 使用道具 举报
本帖最后由 帅李 于 2012-7-21 07:47 编辑

  1. class Test{
  2. static double high=100;//定义并初始化高度
  3. static double sum=100;//定义并初始化总高度
  4. static int num=0;

  5. //用来计算每次下落的总路程
  6. static void   total(){
  7.   sum=sum+2*high;
  8. }
  9. //用来计算每次反弹的高度,并调用计算总路程的函数
  10. static void  nextHigh(){
  11.   //对下落的此数进行判断
  12.   if(num>=10)
  13.   {
  14.    System.out.println("总共下落了多少:"+sum);
  15.    System.exit(0);
  16.   }
  17.   num++;
  18.   high=high/2;
  19.   System.out.println("第"+num+"次反弹:"+high);
  20.   total();
  21.   nextHigh();
  22. }
  23. public static void main(String[] args) {
  24.   nextHigh();
  25. }
  26. }
复制代码


评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3

查看全部评分

回复 使用道具 举报
什么题?
回复 使用道具 举报
let me look look
回复 使用道具 举报
看看什么题
回复 使用道具 举报
看看会不会做,浪费不浪费时间
回复 使用道具 举报
学习下
回复 使用道具 举报
本帖最后由 张凯 于 2012-7-21 09:26 编辑
  1. /*
  2. 1.设置double类型变量sum1,用来记录小球走过的路程,初始值是0,
  3. 2.设置一个double类型变量l,来记录小球每次落地后反弹的高度,初始值为100,以后每经过一次落地,反弹高度变为l=l/2.
  4. 3.经过一个for循环,可求得小球走过的距离sum1=sum1+2*l.
  5. 4.因为再算距离时对100算了两次,所以最后的结果需要sum=sum1-100进行调整。
  6. 5.不要掉入陷阱,小球走过的路程不仅仅是弹起的高度,还有落下的高度。
  7. */
  8. class Demo
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 double sum=0;//设置一个求最后小球走过路程的变量。
  13.                 double sum1=0;//这是初步求的小球经过路程的变量,最后还要调整一次。
  14.                 double l=100.0;//设置小球第一的反弹高度值为100.
  15.                 for(int a=1;a<=10;a++)//通过for循环,进行10次循环,
  16.                         {
  17.                         sum1=sum1+2*l;//获取每次小球落地时经过的路程。
  18.                         l=l/2;//获取每次落地反弹后的高度。
  19.                         System.out.println("第"+a+"次小球反弹"+l+"米");//打印出小球每次落地后的反弹高度。
  20.                         
  21.                 }
  22.         sum=sum1-100;//对最后小球经历路程进行调整(原因前面有介绍)
  23.         System.out.println("第10次落地时,小球经过的距离是"+sum+"米");//最后打印出小球经过10次落地后,所经历的路程。
  24.         }
  25. }
复制代码
这是运行结果:

未命名.jpg (31.06 KB, 下载次数: 24)

未命名.jpg

评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3

查看全部评分

回复 使用道具 举报
先回复再回答~~~
回复 使用道具 举报
先看看题目
回复 使用道具 举报
看看什么题目
回复 使用道具 举报
/*
思路:我的思路是这样的:
第一次:100米的高空,可以假设第一次落下时先弹起100米再落下100米,这样第一次落地时走过的距离就是200米;
第二次:上升50米再落下50米,故第二次走过的距离是100米;
第三次:上升25米再落下25米,故第三次走过的距离是50;



以此类推,每次落地时走过的距离都是前一次落地时走过距离的一半。这样只要把十次走过的距离相加求和就行。
但是需要注意的是最后一次时一定要减去第一次时假设上升的那100米。
第十次落地时弹起的高度就是前一次落地时走过距离的1/4。
这样,通过程序计算的落地十次时走过的距离为sum=299.609375;
第十次落地后弹起的高度为:endUp=0.048828125.
*/

class GetBallSum1
{
        public static void main(String[] args)
        {
                getSum(100,10);
        }
        public static void getSum(double dis,int n)
        {
                double s = dis*2;
                double endUp = 0;
                double sum = 0;
                for (int i = 1;i<=n ;i++ )
                {
                        sum =sum + s;
                        s = s/2;
                }
                sum = sum -dis;
                endUp = s/4;

                System.out.println("落地第"+n+"次时走过的距离:"+sum);
                System.out.println("第"+n+"次落地后弹起来的高度:"+endUp);
        }
}

评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3

查看全部评分

回复 使用道具 举报
本帖最后由 feigecal 于 2012-7-21 09:31 编辑

/**
需求:一球从100米高度自由落下,每次落地后反跳到原来 高度的一半再落下,求它在第10次落地时共经过多少米?第10反跳多高?
分析:第10次落地,说明共反跳了9次,把第一次也算上是反跳起来的,那总路程就是前9次高度的二倍再减去100,第10次反跳高度是第9次的一半
步骤:
1,定义double型变量用于记录和高
2,用循环语句计算每次的高,再相加
3,打印输出
*/
class JiSuan
{
        public static void main(String[] args)
       {
              double h=100;
              double sum=0;
              double d=0;
              for (int x=0;x<10 ;x++ )
            {
                        double temp1=Math.pow(2,x);
                        double temp=h/temp1;
                        sum+=temp;                                //求出把100当第一次的前9次的高度和
                       if (x==9)
                      {
                              d=temp/2;                             //第9次高度的一半是第10次的高度
                      }
          }
          sum=sum*2-100;
           System.out.println("共经过"+sum+"米,"+"第十次反跳"+d+"米。");
     }
}

评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3

查看全部评分

回复 使用道具 举报
本帖最后由 曹恒业 于 2012-7-21 11:19 编辑

看一看!~~

/*
需求:一球从100米高度自由落下,每次落地后反跳到原来高度的一半再落下,
          求它在第10次落地时共经过多少米?第10反跳多高?
思路:估计大家都是循环做的,所以写个递归,思路见各函数说明。
*/
class BallDemo
{
        //经过num次,初始高度为height米,额外增加首次落体高度小球所经过多少米
        public static double getTotal(int num, double height)
        {
                if(num==0)
                        return 2*height;
                //以小球每上升和下一次下落为一组,则该组经过的距离是后一组的2倍,以此为递归条件。
                return 2*height+getTotal(num-1,height/2);
        }

        //经过num次,初始高度为height,小球共经过多少米
        public static double getLen(int num, double height)
        {
                //getTotal()中多算了一次初始下落高度,故要减去
                return getTotal(num, height)-height;
        }

        //经过num次,初始高度为height米,小球上升弹起的高度
        public static double getUpLen(int num, double height)
        {
                if(num==0)
                        return height;
                //小球每落地上升一次,弹起的高度减半
                return getUpLen(num-1,height/2);
        }

        public static void sop(Object obj)
        {
                System.out.println(obj);
        }

        public static void main(String[] args)
        {
                sop("第10次反跳的高度:"+getUpLen(10,100));

                sop("在第10次落地时共经过"+getLen(10,100)+"米");
        }
}


评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3 都是递归高手....

查看全部评分

回复 使用道具 举报
看看会不
回复 使用道具 举报
本帖最后由 陈冲 于 2012-7-21 11:34 编辑
  1. /*
  2. 一球从100米高空自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过了多少米?第10次反弹多高?
  3. */


  4. class FallingBall
  5. {
  6.     public static void main(String[] args)
  7.     {
  8.         rtHeight(100,10);
  9.     }

  10.     /*
  11.     定义一个求反弹高度的函数,需要将起始高度和反弹次数传入函数
  12.     在反弹过程中,高度计算可能出现小数,所以高度定义为double h;
  13.     反弹次数定义为int count;
  14.     */
  15.     public static void rtHeight(double height,int count)
  16.     {   
  17.         double h=height;
  18.         double sum=height;//首次落地时,高度为100米
  19.         while(count>0)
  20.         {
  21.             count--;
  22.             if((10-count)>1)
  23.             {
  24.                 sum+=2*h;//第n次落地的时候,球走过的距离是第n-1次反弹高度的两倍(反弹和落地高度相同)
  25.                                     //而n-1>0的情况,只在n>=2时存在,n<2的情况在下面的else中讨论
  26.                 h=0.5*h;
  27.                 System.out.println("第"+(10-count)+"次落地时,球共经过了:"+sum+" 米");
  28.                 System.out.println("第"+(10-count)+"反弹的高度是:"+h+" 米");
  29.             }
  30.             else
  31.             {
  32.                 h=0.5*h;
  33.                 System.out.println("第"+(10-count)+"次落地时,球共经过了:"+height+" 米");
  34.                 System.out.println("第"+(10-count)+"反弹的高度是:"+h+" 米");
  35.             }
  36.         }
  37.     }
  38. }
复制代码
运算结果如下:

未命名.jpg (60.79 KB, 下载次数: 21)

运算结果

运算结果

评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3

查看全部评分

回复 使用道具 举报
之前回复的有一点错误,现在更改如下:
/*
思路:我的思路是这样的:
第一次:100米的高空,可以假设第一次落下时先弹起100米再落下100米,这样第一次落地时走过的距离就是200米;
第二次:上升50米再落下50米,故第二次走过的距离是100米;
第三次:上升25米再落下25米,故第三次走过的距离是50;



以此类推,每次落地时走过的距离都是前一次落地时走过距离的一半。这样只要把十次走过的距离相加求和就行。
但是需要注意的是最后一次时一定要减去第一次时假设上升的那100米。
第十次落地时弹起的高度就是前一次落地时走过距离的1/4。
这样,通过程序计算的落地十次时走过的距离为sum=299.609375;
第十次落地后弹起的高度为:endUp=0.048828125.
*/

class GetBallSum1
{
public static void main(String[] args)
{
  getSum(100,10);
}
public static void getSum(double dis,int n)
{
  double s = dis*2;
  double endUp = 0;
  double sum = 0;
  for (int i = 1;i<=n ;i++ )
  {
   sum =sum + s;
   endUp = s/4;
   s = s/2;
   
   System.out.println("落地第"+i+"次时走过的距离(包含那假设的100米):"+sum);
   System.out.println("第"+i+"次落地后弹起来的高度:"+endUp);
  }
  sum = sum - dis;
  //endUp = s/4;
  System.out.println("最终结果如下----------------------");
  System.out.println("落地第"+n+"次时走过的距离:"+sum);
  System.out.println("第"+n+"次落地后弹起来的高度:"+endUp);
}
}


评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3

查看全部评分

回复 使用道具 举报
我要回复
回复 使用道具 举报
看是啥题目
回复 使用道具 举报
  1. /*
  2. * 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
  3. * 求它在第10次落地时,共经过多少米?第10次反弹多高?
  4. * 分析:
  5. * 第一次落地100,第一次反弹高度50;
  6. * 第二次落地100+(50+50),第二次反弹高度为25;
  7. * 第三次反弹到最高点路程100+(50+50)+(25+25),第三次反弹高度为12.5;
  8. * 。。。
  9. * 可见每反弹一次,反弹高度就会减半,而每落地一次,就是上一次落地的总距离距离+上一次反弹高度的两倍。
  10. * 逆向向前推,第九次反弹高度*2+第八次反弹高度*2+。。。。+第一次反弹高度*2+100,就为一共的路程。
  11. */

  12. public class LuoTiDemo {
  13.         public static void main(String[]args){
  14.                 System.out.println(fantan(100,10));
  15.                 System.out.println(lucheng(100,10));
  16.                
  17.                
  18.         }
  19.         public static  double fantan(int height,int count)//反弹高度逐次减半
  20.         {
  21.          return height/(Math.pow(2, count));
  22.         }
  23.         public static double lucheng(int height,int count )
  24.         {

  25.                 double sum=0;//先求取从第一次落地反弹到第十次触地的距离。
  26.        
  27.                 while(count>1){
  28.                         sum+=2*fantan(height,count-1);
  29.                         count--;
  30.                 }
  31.                        
  32.                 return sum+height;
  33.         }

  34. }
复制代码
结果:
0.09765625
299.609375

评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马