题意整理
- 给定小球的初始高度和落地次数,每次小球落地后,会反弹回原高度的一半,再落下。
- 求落地若干次后,小球反弹的高度,以及最后一次落地时,经过的总距离。
方法一(循环)
1.解题思路
- 定义一个变量distance,用于记录第n次反弹后经过的总距离。
- 使用循环模拟落地反弹的过程,每次反弹,高度减半,每次经过的距离为反弹后距离的三倍,总距离只需将每次的距离累加。
- 由于最后要计算第n次落地时经过的距离,所以要减去最后一次反弹的高度,即distance-h。
动图展示:
2.代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//标准输入
Scanner scanner=new Scanner(System.in);
//高度
float h=scanner.nextFloat();
//落地次数
int n =scanner.nextInt();
//第n次反弹后经过的总距离
float distance=0;
for(int i=1;i<=n;i++){
//高度减半
h/=2;
//记录距离相应的变化
distance+=h*3;
}
//由于要计算第n次落地时经过的距离,所以要减去最后一次反弹的高度,即distance-h
System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", distance-h));
}
}
3.复杂度分析
- 时间复杂度:总共需要循环n次,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。