除了第一次小球落地没有往返外,后面的每一次路程都包括小球弹起和小球落地,所以总路程就是从第二次开始反弹的高度全部加起来,再加上第一次落地的高度。
/**
* HJ38 求小球落地5次后所经历的路程和第5次反弹的高度
* 描述
* 假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高?
* 最后的误差判断是小数点6位
* 输入描述:
* 输入起始高度,int型
* 输出描述:
* 分别输出第5次落地时,共经过多少米第5次反弹多高
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()){
int n = in.nextInt();
// 次数5次
int c = 5;
ballLanding(n, c);
}
}
private static void ballLanding(int n, int count) {
double sum = 0;
// 除了第一次落下,是最长路程n, 后面每次后反弹到落地都是两倍路程,并且高度减半
double curr = n;
while (count > 0){
// 这里多加了一个n,第一次
sum += 2 * curr ;
// 路程减半
curr = curr / 2.0;
count--;
}
// 输出时减去n就得到了路程
System.out.println(sum - n);
System.out.println(curr);
}
}



京公网安备 11010502036488号