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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

看看什么题!
回复 使用道具 举报

  1. /*
  2. 需求:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它第十次落地时,共经过多少米?
  3.    第十次反跳的高度?
  4. 思路:1,先求出某一次弹起的高度。
  5.         2,再求出弹起高度的总和。

  6. */
  7. package com.itheima;

  8. public class Climb {

  9.         public static void main(String[] args) {
  10.                 int n = 10;
  11.                 double sum = 100;
  12.                 for(int i=1;i<=n;i++){
  13.                         System.out.println("第"+i+"次弹起的高度:"+binaryValue(i)*100);
  14.                         sum += binaryValue(i)*100*2;//因为弹起和落下要有两次,所有要乘以2。
  15.                 }
  16.                 System.out.println("第"+n+"次弹起的高度总和:"+sum);
  17.         }
  18.         public static double binaryValue(double n){//这里用到了递归的方法。取到第N次所需要乘的数据。
  19.                 double inital = 1d/2d;
  20.                 if(n == 1){
  21.                         return inital;
  22.                 }
  23.                 return binaryValue(n-1)*inital;
  24.         }
  25. }
复制代码
回复 使用道具 举报
结果图片没发上。再发过一次,接上楼。。。

算球经过的长度.jpg (34.23 KB, 下载次数: 27)

算球经过的长度.jpg

评分

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

查看全部评分

回复 使用道具 举报
看看题目
回复 使用道具 举报
大家加油哦!考验大家基础的时刻到了!
回复 使用道具 举报
看下题目吧
回复 使用道具 举报

/*
  小球先落地,再弹起,即:至第十次落地的路程不包含第十次弹起的高度
*/
class Demo
{
public static void main(String[] args)
{
  double sum=0;//定义初始路程
  double high=100;//定义初始高度
  for (int x=1;x<=10 ;x++ )//遍历小球弹起次数
  {
     if (x==1)//因为至第一次落地小球行驶路程为单程,也就是初始高度high
     {
        sum=high;
     }
     else
        sum=sum+high*2;//求和,除第一次外其余小球弹起和下降走的都是上次弹起高度:high*2
     high=high/2.0;//求商,第x次弹起的高度为上次弹起高度的一半
     System.out.println("至第"+x+"次落地经过路程"+sum+"\t"+"第"+x+"次落地弹起高度"+high);
  }
}
}

评分

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

查看全部评分

回复 使用道具 举报
/*思路:1用for循环
2每次路程是上次的一半
3求和,把以前的结果相加,用sum
4定义higgt,得到每次的高度*/
lass one
  {
   public static void main(String[]args)
   { hight(11);
   //float sum1= (return sum);

//System.out.println(sum1);
   }
  
  
  public static void hight(int num)
  {
   float H=100f;
  float sum=100f;
   for(int x=0;x<num;x++)
    {
   H=H/2;
   System.out.print("高度H("+x+")="+H+"\t");
   sum+=H; System.out.println("总路程"+sum);
   System.out.println();
  
  // return H;
   // return sum;

    }
   
   
  }
  }
修改了n次我认为是对的,注释的代码不知道怎么改进,还有我加了制表符
但是打印的还是很丑陋,求高手给我优化一下

未命名.jpg (63.05 KB, 下载次数: 32)

未命名.jpg
回复 使用道具 举报
package sss;

public class Heights {

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

       经过多少米?第10次反弹多高?
         */
        public static void main(String[] args) {
                       double height=100;//定义原始高度100米
                           double  fantan=100;//定义球落地时所反弹的高度
                           double  sum=height;//定义球落地时所经过的总长度
                           int num=10;//定义落地次数10次
                           for(int i=1;i<=num;i++){
                                   fantan=fantan/2;
                                   sum=sum+fantan*2;
                                   System.out.println("第"+i+"次落地时,共经过"+sum+"米");
                                   System.out.println("第"+i+"次落地时,反弹"+fantan+"米");
                          }
        }

}
执行结果是:
第1次落地时,共经过200.0米
第1次落地时,反弹50.0米
第2次落地时,共经过250.0米
第2次落地时,反弹25.0米
第3次落地时,共经过275.0米
第3次落地时,反弹12.5米
第4次落地时,共经过287.5米
第4次落地时,反弹6.25米
第5次落地时,共经过293.75米
第5次落地时,反弹3.125米
第6次落地时,共经过296.875米
第6次落地时,反弹1.5625米
第7次落地时,共经过298.4375米
第7次落地时,反弹0.78125米
第8次落地时,共经过299.21875米
第8次落地时,反弹0.390625米
第9次落地时,共经过299.609375米
第9次落地时,反弹0.1953125米
第10次落地时,共经过299.8046875米
第10次落地时,反弹0.09765625米

评分

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

查看全部评分

回复 使用道具 举报
我好想做错了,从第一以后路程是双倍,我忘记了。郁闷。我再改改
回复 使用道具 举报
1.思路及过程编码见calc.png
2.结果见result.png

calc.png (39.34 KB, 下载次数: 26)

calc

calc

result.png (1.89 KB, 下载次数: 33)

result

result

评分

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

查看全部评分

回复 使用道具 举报
在for循环里面改成 sum+=H*2;这下结果对了,{:soso_e142:}

0.jpg (66.83 KB, 下载次数: 30)

0.jpg

评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3 角标错了,难道还有第0次碰撞?.

查看全部评分

回复 使用道具 举报
必须看看。。
回复 使用道具 举报
本帖最后由 马州州 于 2012-7-21 13:39 编辑

看下题目,顺便占楼
代码写好了

  1. <P>/*
  2. 需求:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它第十次落地时,共经过多少米?</P>
  3. <P>   第十次反跳的高度?
  4. 求共经过多少米的时候,因为球反复跳起,那么向上跳起的距离也应该计算在内</P>
  5. <P>思想:1,因为每次落地反跳回原高度的一半,所以用到循环,for
  6.    2,要求第十次落地时共经过多少米,累加思想
  7. 步骤:1,定义高度,也就是第一次落下的高度
  8.    2,用for循环,定下循环的次数,因为第一次直接落下,之前没有跳起,所以应该是循环9次
  9.       3,累加每次落下反跳的长度
  10. */</P>
  11. <P>class  Test
  12. {
  13. public static void main(String[] args)
  14. {
  15.   float xg = 100,fg= xg/2;//xg下落高度,hg反跳高度
  16.   
  17.   for (int n=2;n<=10 ;n++ )
  18.   {
  19.    
  20.     xg = xg+2*fg;//落地时共经过的米数,因为有跳起有下落,所以应该是跳起高度的2倍
  21.     fg = fg/2;//第N次反跳的高度
  22.    
  23.    
  24.   }
  25.   
  26.   System.out.println("第十次落地共经过"+xg+"米");
  27.   System.out.println("第十反跳的告诉为"+fg+"米");
  28. }
  29. }
  30. </P>
复制代码
结果如图

评分

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

查看全部评分

回复 使用道具 举报
俺也来顶顶滔哥

点评

感谢支持  发表于 2012-7-21 16:20
回复 使用道具 举报

  1. <P> </P>
复制代码
  1. class Demo1
  2. {
  3. public static void main(String[] args)
  4. {

  5. int y=10;//跳跃次数
  6. double h=100;//高度
  7. int m;
  8. double sum=100;//跳跃后共经过的米数

  9. for (m=1;m<=y ;m++ )
  10. {
  11. System.out.println("第"+m+"次落地时,共经过:"+sum+"米");

  12. h=h/2;//计算跳跃第m次的高度,
  13. System.out.println("反弹"+m+"次的高度是:"+h);

  14. sum=sum+h*2;//计算跳跃m次的总高度。


  15. }
  16. }
  17. }
复制代码
结果:
  1. 第1次落地时,共经过:100.0米
  2. 反弹1次的高度是:50.0
  3. 第2次落地时,共经过:200.0米
  4. 反弹2次的高度是:25.0
  5. 第3次落地时,共经过:250.0米
  6. 反弹3次的高度是:12.5
  7. 第4次落地时,共经过:275.0米
  8. 反弹4次的高度是:6.25
  9. 第5次落地时,共经过:287.5米
  10. 反弹5次的高度是:3.125
  11. 第6次落地时,共经过:293.75米
  12. 反弹6次的高度是:1.5625
  13. 第7次落地时,共经过:296.875米
  14. 反弹7次的高度是:0.78125
  15. 第8次落地时,共经过:298.4375米
  16. 反弹8次的高度是:0.390625
  17. 第9次落地时,共经过:299.21875米
  18. 反弹9次的高度是:0.1953125
  19. 第10次落地时,共经过:299.609375米
  20. 反弹10次的高度是:0.09765625
复制代码
分析:
这题也就是用到遍历,
先思考整个物理过程,最好画个图,这样就会很清楚了,
用上面的方法都能看懂,简单,
其实还有另外一种方法:第x次跳跃的高度=100除以(2的x次方),
其他的都一样。

见图:


Demo1.png (19.75 KB, 下载次数: 27)

分析

分析

评分

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

查看全部评分

回复 使用道具 举报
不管拿到拿不到,先看看
回复 使用道具 举报
还要先回复才能看
回复 使用道具 举报
本帖最后由 鲍霄霄 于 2012-7-21 13:24 编辑

很明显,每次弹起的高度为50,25,12.5等等,即100的1/2,1/4,1/8,即第N次弹起的高度是100乘以2的N次方之1。接着分析每次弹起经过的路程,第一次:100+50,第二次:50+25,第三次:25+12.5,不难发现,每一次的路程等于前一次弹起的高度+前一次高度的一半,即前一次高度的3/2,或者是本次弹起高度的3倍,以此类推,第N次弹起的路程=第N次弹起高度*3=(100乘以2的N次方之1)*3,用代码表示如下:
  1. package pack1;

  2. public class ClassE {

  3.         
  4.         public static void main(String[] args) {
  5.                
  6.                 double h;  //第10次跳起的高度
  7.                
  8.                 double s=0.0;  //第10次弹起时,总共经过的路程
  9.                
  10.                 h = 100/Math.pow(2, 10); //表示2的10次方
  11.                
  12.                 for(int n=1;n<=10;n++){
  13.                         
  14.                         s+=100*3/(Math.pow(2, n));
  15.                         
  16.                 }
  17.                
  18.                 System.out.println("第10次弹起的高度为:"+h);
  19.                
  20.                 System.out.println("第10次弹起时,所经过总路程为:"+s);
  21.                
  22.         }

  23. }
复制代码

1233.JPG (54.62 KB, 下载次数: 30)

1233.JPG

评分

参与人数 1技术分 +3 收起 理由
蒋映辉 + 3 嘎嘎 不知道你这思路是好还不好,每次/2就.

查看全部评分

回复 使用道具 举报
张_涛 黑马帝 2012-7-21 13:04:34
120#
本帖最后由 张_涛 于 2012-7-21 13:22 编辑
张_涛 发表于 2012-7-21 07:22
呃,多算了一次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马