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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

本帖最后由 包晗 于 2012-7-21 01:58 编辑

  1. <P>/*
  2. 100米落下的球,落地后跌回一半,求第10次落下时候,经过了多少米,反弹多高?</P>
  3. <P>
  4. 思路:x=100除以2.再赋予x  
  5. x/2 是第一次反弹  10次就是第10次落下后的反弹</P>
  6. <P>因为初始化 是 球 在100的高空处  只要落下来 就是第一次   循环10次</P>
  7. <P>落下经过多少米,设置一个SUM来记录 x的值。将
  8. 落下来1次 经过了100米   落下来两次经过了100+50+50  第三次是100+50+50+25+25  以此类推  x是第十落地后弹起来的值  
  9. 要将其去除掉。
  10. 求经过多少米。理论上就是 落下的米数+弹起来的米数。。。。。
  11. 通过FOR循环求出来的sum  要减去 第十落地后弹起来的值  再乘以2   外加第一次落下的100米</P>
  12. <P> </P>
  13. <P>*/</P>
  14. <P>
  15. class Boll
  16. {
  17. double x=100,sum;
  18. public void show()
  19. {
  20.   for (int i=1;i<=10 ;i++ )
  21.   {
  22.    
  23.    x=x/2.0;
  24.    sum+=x;
  25.   }
  26.   sum=(sum-x)*2+100;//x是 第十次弹起来的米数
  27.   System.out.println("第十次反弹为"+x+"米");
  28.   System.out.println("第十次反弹经过了"+sum+"米");
  29. }
  30. }
  31. class  BollDemo
  32. {
  33. public static void main(String[] args)
  34. {
  35.   Boll o =new Boll();
  36.   o.show();
  37.   
  38. }
  39. }
  40. </P>
复制代码
对了吗?

三分啊,眼睛都绿了。结果 思路 程序 都写着。。
黑马 我想来

答案.jpg (8.36 KB, 下载次数: 45)

答案.jpg

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 rslheima 于 2012-7-21 02:06 编辑

大半夜的写这玩意,呵呵,滔哥,给分不???
  1. package 滔哥答题;
  2. class Ball{
  3.          double sum;
  4.          double temp;
  5.          double Height;
  6.          public static void main(String[] args){
  7.                 Ball ball=new Ball();
  8.                 ball.sum(100,10);//输入离地的高度100,经过几次反弹:10
  9.          }
  10.         public  void sum(double initHeight,int times ){
  11.                 int t=0;
  12.                 Height=initHeight;
  13.                 int n=times++;
  14.                 while(initHeight>0&&t<times){
  15.                         initHeight=bounce(initHeight,t);
  16.                         t++;
  17.                         if(t>1){
  18.                         System.out.println("第"+(t-1)+"次的反弹的高度是"+initHeight+"米");
  19.                         }
  20.                         if(t<=n)
  21.                         System.out.println("第"+t+"次落地时经过了"+sum+"米");
  22.                 }
  23.         }
  24.         public  double  bounce(double initHeight,int t){
  25.                 initHeight=Height/Math.pow(2,t);//此处用的是初始高度和反弹高度的关系定义的方法
  26.                 if(t==0){sum+=initHeight;}
  27.                 else{temp=initHeight*2;
  28.                          sum+=temp;//计算经历的路程
  29.                 }
  30.                 return initHeight;//返回反弹的高度
  31.         }
  32. }

  33. 结果:
  34. 第1次落地时经过了100.0米
  35. 第1次的反弹的高度是50.0米
  36. 第2次落地时经过了200.0米
  37. 第2次的反弹的高度是25.0米
  38. 第3次落地时经过了250.0米
  39. 第3次的反弹的高度是12.5米
  40. 第4次落地时经过了275.0米
  41. 第4次的反弹的高度是6.25米
  42. 第5次落地时经过了287.5米
  43. 第5次的反弹的高度是3.125米
  44. 第6次落地时经过了293.75米
  45. 第6次的反弹的高度是1.5625米
  46. 第7次落地时经过了296.875米
  47. 第7次的反弹的高度是0.78125米
  48. 第8次落地时经过了298.4375米
  49. 第8次的反弹的高度是0.390625米
  50. 第9次落地时经过了299.21875米
  51. 第9次的反弹的高度是0.1953125米
  52. 第10次落地时经过了299.609375米
  53. 第10次的反弹的高度是0.09765625米
复制代码

评分

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

查看全部评分

回复 使用道具 举报

public class Test {
public static void main(String[] args) {
double i= 100;//设置高度100米
double j = i / 2; //第一次反弹  
int w = 0;//初始化
for (w = 2;w<= 10;w ++){//循环
i = i+ j * 2; //第i次落地经过多少米
j = j / 2;//第i次反弹的高度
}

System.out.println(i+"米");
System.out.println(j"米");
}

}

运行结果如下:

评分

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

查看全部评分

回复 使用道具 举报
  1. package exercise;

  2. public class SeekHeight {

  3.         /**
  4.          * @author Wangbaokang
  5.          * @param args height 球每次弹起的高度;time,第几次弹起,sum,球弹起过程中一共走过的路程
  6.          */
  7.         public static void main(String[] args) {
  8.                 // TODO Auto-generated method stub
  9.                 SeekHeight(10);
  10.                
  11.         }       
  12.         public static void SeekHeight(int time){
  13.                 double height =100,sum = height;
  14.                 for ( int i =1; i <= time ; i++) {
  15.                         sum += height;
  16.                         height = height * 0.5;                         
  17.                         sop("第"+i+"次跳起"+height+"米  "+"第"+i+"次反弹后落地,第"+(i+1)+"次弹起前共经过"+sum+"米");                               
  18.                 }
  19.         }       
  20.         public static void sop(Object obj){
  21.                 System.out.println(obj);
  22.         }

  23. }
复制代码
刚才只是计算的跳起的总高度,现在修改了下代码,

1.JPG (52.85 KB, 下载次数: 57)

运行结构截图

运行结构截图

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 应文 于 2012-7-21 03:25 编辑

/**
    下 上   下    上  下   上      下      上        下        上        ---            上                                    球的轨迹:
100   50  50  25  25   12.5  12.5  6.25   6.25    3.125      ---     100/(x^x/2)
   |      50   |   25   |     12.5     |       6.25     |      3.125      ---     100/(x^x/2)
   |      2     |    4    |       8        |         16      |      32           ---        x^x/2
   |  >2次  |   >4   |     >6       |         >8      |     >10         ---     >20次
100        50         25           12.5               6.25                 ---   
   1           2          4                8                  16                   ---   
x=1次  >3        >5              >7                  >9                  ---        
*/
class Sum100
{
public static void main(String[] args)
{
//  double sum_jishu= 0; //初始基数经过的米数和sum
//  double sum_oushu= 0; //初始偶数经过的米数和sum
  double sum = 0;   //初始经过的米数总和sum
  double sum_ago = 0;  //初始前9次经过的米数和sum
  double sum_last = 0;  //初始第十次经过的米数和sum
  double height = 100;  //高度
  int order = 20;
  for(int x=1; x<=order; x++)
  {
   /**
   这个是第五次弹起时的情况
   if(x%2==0&& x!=10)
   {
    sum_oushu=sum_oushu+high/Math.pow(2,x/2);
   }
   if(x%2!=0&& x!=10)
   {
    sum_jishu=sum_jishu+height/Math.pow(2,x/2);
   }
   if(x==10)
   {
    sum_qian=height/Math.pow(2,x/2);
    sum=sum_jishu+sum_oushu;
   }
   */
   if(x == 20)  //第十次弹起即第20次上下运动
   {
    sum_last = height/Math.pow(2,x/2); //计算第十次反弹的高度
   }
   else
    sum_ago = sum_ago + height/Math.pow(2,x/2); //计算前19次共进过的米数和
  }
  sum = sum_ago ;  //落地时一共进过的米数=前19次共进过的米数和
  System.out.println("小球落地时共经过了:"+sum+"米");
  System.out.println("第十次反弹了:"+sum_last+"米");
}
}

新手学习中。。

1.jpg (9.7 KB, 下载次数: 48)

结果

结果

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 何旭栋 于 2012-7-21 03:27 编辑

复制代码

  1. class fallingDemo {
  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 falling(100, 10);
  8.         }
  9.         
  10.         public static void falling(int height, int times) {
  11.                 // TODO Auto-generated constructor stub
  12.                 String h = ""+height;
  13.         /*
  14.          * 假设球无限弹,那么总共经过高度为:h = 100+(50+50)+(25+25)+(12.5+12.5)+....
  15.          * 如果times是无限,那么h就无限接近300,那么总高度为300减去最后一次弹起的高度乘以2
  16.          * 总高度循环相加可能造成精度损失,所以用300减去最后一次弹起的高度的两倍来计算更准确
  17.          */
  18.                 double sumHeight = 300d;
  19.                 String upspring = h;
  20.                
  21.                 for (int i=1; i<=times; i++){
  22.                         System.out.println("第"+i+"次落地时共经过:"+
  23.                                         (sumHeight-Double.parseDouble(upspring)*2)+" 米");//总高度为300减去最后一次弹起的高度两倍
  24.                         upspring = half(upspring);
  25.                         System.out.println("第"+i+"次弹起的高度:"+upspring);
  26.                 }
  27.         }
  28.         
  29. //        如果弹起次数过多直接double计算高度必然造成精度损失,所以转换字符串计算更加精确
  30.         public static String half(String height){
  31.                 int num = 0;
  32.                 int previous = 0;
  33.                 StringBuilder sb = new StringBuilder();
  34.                
  35.                 if (!height.contains(".")){
  36.                         num = Integer.parseInt(height);
  37.                         previous = num;
  38.                         num = num>>1;
  39.                         sb.append(num);
  40.                         if(previous%2 != 0){
  41.                                 sb.append('.');
  42.                                 sb.append(5);
  43.                         }        
  44.                 }
  45.                 else{
  46.                         int index = height.indexOf(".");
  47.                         num = Integer.parseInt(height.substring(0, index));
  48.                         char[] chs = height.substring(index+1).toCharArray();
  49.                         
  50.                         previous = num;
  51.                         num = num>>1;
  52.                         sb.append(num);
  53.                         sb.append('.');
  54.                         for (char ch : chs){
  55.                                 num = Integer.parseInt(""+ch);
  56.                                 if(previous%2 != 0)
  57.                                         num += 10;
  58.                                 previous = num;
  59.                                 num = num>>1;
  60.                                 sb.append(num);
  61.                         }
  62.                         if(previous%2 != 0)
  63.                                 sb.append(5);
  64.                 }
  65.                 return sb.toString();
  66.         }
  67. }
复制代码
睡觉前看到,不能放过

截图.JPG (40.35 KB, 下载次数: 35)

截图.JPG

评分

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

查看全部评分

回复 使用道具 举报
rioy1 初级黑马 2012-7-21 03:34:09
67#
看看题目
回复 使用道具 举报
rioy1 初级黑马 2012-7-21 04:10:06
68#
        double height=10000;
        double sum=0;
        for(int i=1;i<11;i++)
        {
                sum+=height;
                height/=2;
                System.out.println(height);
        }
        System.out.println(sum);
回复 使用道具 举报
rioy1 初级黑马 2012-7-21 04:10:24
69#
rioy1 发表于 2012-7-21 04:10
double height=10000;
        double sum=0;
        for(int i=1;i

这种题目提高自信啊
回复 使用道具 举报
看一下~
回复 使用道具 举报
路过,!!!!!!
回复 使用道具 举报
  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         double high=100.0;//定义初始高度
  6.         double sum=0;//定义一个sum用来记录总路程
  7.         for(int a=1;a<=3;a++)
  8.                 {
  9.            sum+=high+(high/2.0);//high+(high/2.0)每次小球从落地到弹起的路程
  10.            high=high/2.0;//小球下一次落地的初始高度
  11.         }
  12.         System.out.println("sum="+(sum-high));//小球第十次落地反弹后的总路程减去
  13.                                               //第十次弹起的路程 即为第十次落地时走过的总路程
  14.         System.out.println("high"+high);//小球第十次弹起的高度
  15.        
  16.         }
  17. }
复制代码
回复 使用道具 举报
  1. class  Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         double high=100.0;//定义初始高度
  6.         double sum=0;//定义一个sum用来记录总路程
  7.         for(int a=1;a<=10;a++)
  8.                 {
  9.            sum+=high+(high/2.0);//high+(high/2.0)每次小球从落地到弹起的路程
  10.            high=high/2.0;//小球下一次落地的初始高度
  11.         }
  12.         System.out.println("sum="+(sum-high));//小球第十次落地反弹后的总路程减去
  13.                                               //第十次弹起的路程 即为第十次落地时走过的总路程
  14.         System.out.println("high"+high);//小球第十次弹起的高度
  15.        
  16.         }
  17. }


复制代码
上面的测试忘了改数值
加最终结果补上
C:\Documents and Settings\Administrator\桌面


回复 使用道具 举报
朱云坤 发表于 2012-7-21 05:00
上面的测试忘了改数值
加最终结果补上


评分

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

查看全部评分

回复 使用道具 举报
看题目~~~~~~~~~~~~
回复 使用道具 举报
张_涛 黑马帝 2012-7-21 06:24:15
76#
看题目来了
回复 使用道具 举报
{:soso_e145:}
回复 使用道具 举报
本帖最后由 程潇 于 2012-7-21 08:17 编辑

/*
* 题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
*
* 思路:
* 假设高度为height,反弹高度为fantan,下落次数num,共经过的路程为distance
*
* 分析每一次下落过程各变量的变换情况:
* 每次下落时一共经过的路程,应该是已经经过的路程,上一次下落后反弹的高度和本次下落的高度之和,即distance=distance+fantan+height
* 下落后反弹高度为原高度的一半fantan=height/2,同时也是下次下落的高度height=fantan,下落后次数增加1次,
*
* 每次下落,重复以上过程,直到次数增加到num,再执行一次下落,即可结束
* 因此可以通过循环实现整个下落反弹的过程,下落次数作为循环终止条件,上述下落过程作为循环体,实现代码如下。
*
* */

package test;

public class Ball {

        public static void fall(double height, int num) {

                double fantan = 0.0d;
                double distance = 0.0d;

                for (int i = 0; i < num; i++) {
                        distance = distance + fantan + height;
                        fantan = height / 2;
                        height = fantan;
                }

                System.out.println("第 " + num + " 次落地时,共经过 " + distance + " 米," + "第 "
                                + num + " 次反弹高度 " + fantan + " 米");
        }

        public static void main(String[] args) {

                // 这里为了查看整个下落过程,通过循环,把每次下落后经过的路程和反弹的高度都打印出来
                // 如果要直接得到最终结果,可将以下语句直接写为fall(100,10);
                for (int i = 1; i <= 10; i++)
                        fall(100, i);
        }

}


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

评分

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

查看全部评分

回复 使用道具 举报
张_涛 黑马帝 2012-7-21 07:22:26
79#
本帖最后由 张_涛 于 2012-7-21 07:25 编辑
  1. /**
  2. * 题目:一球从100米高度自由落下,每次落地后反弹回原高度的一半;再落下,求它在第10次 落地时,共经过多少米?第10次反弹多高?
  3. */
  4. public class ReboundTest {
  5.         public static void main(String[] args) {
  6.                 // 定义初次落下的高度
  7.                 float height = 100;
  8.                 // 定义变量i记录一共反弹的次数
  9.                 int i = 10;
  10.                 // 定义变量count记录正在反弹的次数
  11.                 int count = 1;
  12.                 // 定义一个float数组记录每次反弹的高度(同时也是下次落下的高度)
  13.                 float[] reboundArr = new float[i];
  14.                
  15.                 rebound(reboundArr, height, i, count);
  16.                 float sum = countSum(reboundArr) + height - reboundArr[reboundArr.length - 1];
  17.                
  18.                 System.out.println("第10次(最后一次)落地时经过的总距离为:" + sum);
  19.                 System.out.println("第10次(最后一次)反弹的高度为:" + reboundArr[reboundArr.length - 1]);
  20.         }
  21.         
  22.         //将每次反弹的高度记录到arr数组当中
  23.         public static void rebound(float[] arr, float height, int i, int count) {
  24.                 arr[count - 1] = height / 2;
  25.                 count++;
  26.                 if (count <= i) {
  27.                         rebound(arr, arr[count - 2], i, count);
  28.                 }
  29.         }

  30.         //统计反弹的总高度
  31.         public static float countSum(float[] reboundArr) {
  32.                 float sum = 0;
  33.                 for (int i = 0; i < reboundArr.length; i++) {
  34.                         sum += 2 * reboundArr[i];
  35.                         System.out.println(reboundArr[i]);
  36.                 }
  37.                 return sum;
  38.         }
  39. }

  40. /*
  41. 算法思路:
  42. 1. 根据每次落下反弹,因为其都是反弹落下距离的一半,因此多次反弹具有相同的原理,由此想到使用递归算法。
  43.         在递归时,通过判断总弹起次数与当前弹起次数控制递归结束。
  44. 2. 使用rebound方法记录每次反弹的高度,即为落下高度的一半,存放到数组当中。
  45. 3. 而第10次落地时的距离包括第一次落下的距离,不包括第10次弹起的距离。而每次弹起,下次落下的距离是相等的,因此将其乘以2加入总距离当中。
  46. 4. 综上,即可得出所求。
  47. */

  48. 运行结果:
  49. 第1次弹起的高度为:50.0
  50. 第2次弹起的高度为:25.0
  51. 第3次弹起的高度为:12.5
  52. 第4次弹起的高度为:6.25
  53. 第5次弹起的高度为:3.125
  54. 第6次弹起的高度为:1.5625
  55. 第7次弹起的高度为:0.78125
  56. 第8次弹起的高度为:0.390625
  57. 第9次弹起的高度为:0.1953125
  58. 第10次弹起的高度为:0.09765625
  59. 第10次(最后一次)落地时经过的总距离为:299.70703
  60. 第10次(最后一次)反弹的高度为:0.09765625
复制代码

评分

参与人数 1技术分 +2 收起 理由
蒋映辉 + 2 你少算了第十次弹起的距离,给你加两分吧...

查看全部评分

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