每日经典算法题(十) 反弹球
反弹:Rebound
题目
有一颗反弹球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下。
求:
- 它在第 10 次落地时,共经过多少米?
- 第 10 次反弹多高?
拓展题目
有一球从 h 米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第 n 次落地时,共经过多少米?第 n 次反弹多高?
程序分析
此问题还是经典的重复动作循环的问题,只要找到增加路程和高度的变化规律就能解决。
思路
我们可以将路程设为 s,高度设定为 h。
初始高度为 h = 100,初始路程为 s = 0,球在第一次接触地面(即第一次落地)时能反弹的高度为 h/2,路程为 s = 100。此后每次落地 h 都变为原来的 1/2,路程都比原来增加 h/2*2 = h。
所以我们可以确定从第一次落地以后每一次的落地,s 和 h 的变化都是有规律的,可以通过循环来计算。因为有范围限定,所以 for 循环更加合适。
这里循环条件应该设定为 9 次,因为是从第一次落地之后开始到第十次落地只经历 9 次落地,注意这里不要搞错。同时,既然循环是从第一次落地开始的话,s 的初始值也可设定为 100。
这里建议定义 double 类型的数据 (s,h),for 循环结束后输出 s 和 h 即可。
拓展题目,把初始值改为用户输出的 h 即可,反弹次数也为用户输入的 n,n为 for 循环的条件。
代码示例
public class Q10_ReboundBall {
public static void main(String[] args) {