黑马程序员技术交流社区

标题: 一道数学题目,新手不知如何去解 [打印本页]

作者: lqg5522    时间: 2015-4-24 12:28
标题: 一道数学题目,新手不知如何去解
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?

这道题要怎么分析解答?
作者: 突然世界晴    时间: 2015-4-24 12:41
  1. public static void main(String[] args) {
  2.         double x=100;
  3.         int count=0;
  4.         double sum=0;
  5.         while(x>0)
  6.         {
  7.                 count++;
  8.                 sum+=x;
  9.                 x=x/2;
  10.                 if(count==10)
  11.                 {
  12.                         System.out.println("第10次落地,共经过sum="+sum+"米,反弹"+x+"米");
  13.                 }
  14.         }
  15.         //System.out.println(count);
  16. }
  17. }
复制代码

作者: 1017161726    时间: 2015-4-24 13:17

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

分析:j假设球是从地面向上抛出100米再自由下落,
                        球第一次落地,行程100*2m,反弹50m,                50*4。
                        第二次落地,又加行程50*2 m,反弹25m,        25*4。
                        第三次落地,又加行程25*2 m,反弹12.5m,12.5*4。
                        第十次时,又加行程0.5^(10-1) *100*2 m,反弹0.5^10 *100 m,最后总行程要减100m。

                        如果是求第n次落地的行程,和第m次落地后的反弹,就要把行程和反弹分开成两个函数写。这里合起来写了。
*/
class Demo
{
        public static void main(String [] args)
        {
                double high=100;        //总高度
                double sum=0;                        //路程
                double tan=0;                        //弹起高度
                double i=0.5;
                int time=3;
                getR(high,sum,tan,i,time);
        }
        public static void getR(double high,double sum,double tan,double i,int time)
        {
                for (int x=0;x<time;x++)
                {
                        tan=high*i;                                //每次弹起的高度。
                        sum+=tan*4;                                //根据规律得出的结论。
                        high=tan;                                        //反弹高度即下落高度,所以高度值要改变。
                }
                System.out.println("第"+time+"次落地的行程是:"+(sum-100)+"米!");
                System.out.println("第"+time+"次落地后反弹高度是:"+tan+"米!");
        }
}



作者: 1017161726    时间: 2015-4-24 13:21
突然世界晴 发表于 2015-4-24 12:41

哥,你的行程计算时,少了每次上升的路程。。。
还有,你的程序是无限循环的。缺少return语句。。。

作者: cjmjava    时间: 2015-4-24 13:59
/* /题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半; /再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?  /球第一次落地只是往下落的过程,从第二次开始球落地前会经历弹起再 /落下的过程,我们可以从第二次开始计算 */ class Demo  {         public static void main(String[] args)          {                 //球的起始高度100米                 double start = 100;                 //第一次落下时经过100米                 double sum = 100;                 //从第二次开始计算落地经过的长度                 for (int i = 2 ;i <= 10 ; i++ )                 {                         //每次球弹起高度为前一次的一半                         start= start / 2;                         //从弹起到落下经过的长度是弹起高度的一半                         sum = sum + start*2;                 }                 System.out.println("球第10次落地时,共经过:"+sum+"米");                 System.out.println("第10次反弹:"+start+"米");         } }
作者: cjmjava    时间: 2015-4-24 14:00
/*
/题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;
/再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
/球第一次落地只是往下落的过程,从第二次开始球落地前会经历弹起再
/落下的过程,我们可以从第二次开始计算
*/
class Demo
{
        public static void main(String[] args)
        {
                //球的起始高度100米
                double start = 100;
                //第一次落下时经过100米
                double sum = 100;
                //从第二次开始计算落地经过的长度
                for (int i = 2 ;i <= 10 ; i++ )
                {
                        //每次球弹起高度为前一次的一半
                        start= start / 2;
                        //从弹起到落下经过的长度是弹起高度的一半
                        sum = sum + start*2;
                }
                System.out.println("球第10次落地时,共经过:"+sum+"米");
                System.out.println("第10次反弹:"+start+"米");
        }
}
作者: pengyang    时间: 2015-4-24 16:17
我首先想到的是递归
作者: 突然世界晴    时间: 2015-4-24 17:25
本帖最后由 突然世界晴 于 2015-4-24 17:26 编辑
  1. //题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
  2. public class Test43 {
  3. public static void main(String[] args) {
  4.         double x=100;
  5.         int count=0;
  6.         double sum=0;
  7.         //不是无限循环
  8.         while(x>0)
  9.         {
  10.                 count++;
  11.                 sum+=x+x/2; //落下的距离加回弹的
  12.                 x=x/2;
  13.                 if(count==10)
  14.                 {
  15.                         System.out.println("第10次落地,共经过sum="+sum+"米,反弹"+x+"米");
  16.                 }
  17.         }
  18.         //System.out.println(count);
  19. }
  20. }
复制代码

呃 少算了个回弹的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2