黑马程序员技术交流社区
标题:
一道数学题目,新手不知如何去解
[打印本页]
作者:
lqg5522
时间:
2015-4-24 12:28
标题:
一道数学题目,新手不知如何去解
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
这道题要怎么分析解答?
作者:
突然世界晴
时间:
2015-4-24 12:41
public static void main(String[] args) {
double x=100;
int count=0;
double sum=0;
while(x>0)
{
count++;
sum+=x;
x=x/2;
if(count==10)
{
System.out.println("第10次落地,共经过sum="+sum+"米,反弹"+x+"米");
}
}
//System.out.println(count);
}
}
复制代码
作者:
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 编辑
//题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
public class Test43 {
public static void main(String[] args) {
double x=100;
int count=0;
double sum=0;
//不是无限循环
while(x>0)
{
count++;
sum+=x+x/2; //落下的距离加回弹的
x=x/2;
if(count==10)
{
System.out.println("第10次落地,共经过sum="+sum+"米,反弹"+x+"米");
}
}
//System.out.println(count);
}
}
复制代码
呃 少算了个回弹的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2