一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下
2020-07-18 本文已影响0人
简书mhy
方法一
把每一次下落的路程加上每一次反弹的路程相加,即可得出总路程;
由于计算第10次落地的路程,所以不要加第10次的反弹路程即可
次数 | 下落路程 | 反弹路程 |
---|---|---|
1 | 100 100×20 | 50 100×2-1 |
2 | 50 100×2-1 | 25 100×2-2 |
3 | 25 100×2-2 | 12.5 100×2-3 |
... | .... | ... |
n | 100×2-(n-1) | 100×2-n |
代码如下:
int n = 10;
double s = 0, h = 0;
for (int i = 1; i <= n; i++) {
s += 100 * Math.pow(2, -(i - 1));
if (i != n) { //不计算第10次反弹
h += 100 * Math.pow(2, -i);
}
}
double sum = s + h;
System.out.println("第10次落地时经过的总路程" +sum);//299.609375
System.out.println("第10 次反弹高度" + 100 * Math.pow(2, -10));//0.09765625
方法二
image.png换一种思路,不计算第10次的反弹,可以假设第1次没有反弹,即第2次到第10次的反弹和下落都是一样的,再加上第一次的下落就可以了。
第一次下落100;
第二次反弹50 下落 50
第三次反弹 25 下落 25
代码如下
int n = 10;
double s = 100, h = 100;
for (int i = 1; i <= n; i++) {
h = h / 2;
if (i < n) {
s = s + h*2;
}
}
System.out.println("第10次落地时经过的总路程" +s);//299.609375
System.out.println("第10 次反弹高度" + h);//0.09765625