import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // double接收 int会在后面的计算丢失精度 double h = in.nextInt(); double s = 0, temp; // 落地 -> 弹起 为一次历程 for (int i = 0; i < 5; i++) { // 一次历程的路程 = 落地的h + 弹起的0.5h temp = 1.5 * h; // 高度缩减为之前的一半 h *= 0.5; // 累加路程 s += temp; } // 减去最后一次弹起的高度就是第五次落地走的路程 System.out.println(s - h + "\n" + h); } }
还有个更简单的方法 直接计算 设第一次落地前高度为h 则总路程
s = h + 1/2 *h
+ 1/2 * h + 1/4 * h
+ 1/4 * h + 1/8 * h
+ 1/8 * h + 1/16 * h
+ 1/16 * h
第五次落地弹起的高度为 1/32 * h
不难发现 s和h是线性关系 即 s = k * h
设输入的h为h0 输出的s为s0 则有
s/h = s0/h0
将示例的s和h带入 可得
2.875/1 = s0/h0
s0 = 2.875 * h0
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); double h = in.nextInt(); System.out.println(h * 2.875 + "\n" + h * 0.03125); } }