题目的主要信息:
- 一球从米高度自由落下,每次落地后反跳回原高度的一半再落下,求它在第次落地时共经过了多少米?第次返弹多高?
- 结果保留三位小数
具体做法:
我们遍历落地次数,第一次走过了落下高度这么多距离,然后弹起高度降低一半,然后走了弹起的高度这么多距离,完成一次循环,如果个循环,累加距离,不断降低高度。需要注意最后一次落地后虽然要计算弹起的高度,我们还要输出它,但是我们走过的距离已经没有它的,我们此时已经是落地次了,第n次落地相当于第n-1次弹起 。
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();
float dis = 0;
for(int i = 0; i < n; i++){
dis += h; //每次加上落下来的距离
h /= 2; //弹起距离缩短一半
if(i == n - 1){
System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", dis));
}
dis += h; //弹上去走的距离
}
}
}
复杂度分析:
- 时间复杂度:,一次遍历
- 空间复杂度:,无额外空间