一球从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

方法二

换一种思路,不计算第10次的反弹,可以假设第1次没有反弹,即第2次到第10次的反弹和下落都是一样的,再加上第一次的下落就可以了。
第一次下落100;
第二次反弹50 下落 50
第三次反弹 25 下落 25

image.png

代码如下

        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
上一篇下一篇

猜你喜欢

热点阅读