栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

每日经典算法题(十) 反弹球

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日经典算法题(十) 反弹球

每日经典算法题(十) 反弹球

反弹:Rebound

题目

有一颗反弹球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下。

求:

  1. 它在第 10 次落地时,共经过多少米?
  2. 第 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) {
        double h = 100,s = 100;
        for (int i=1;i<10;i++){
            h = h/2;
            s += h/2*2;
        }
        System.out.println("共经过"+s+"米。");
        System.out.println("反弹"+h/2+"米高。");
    }
}
拓展代码示例
public class Q10_ReboundBall_Extend {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入高度:");
        double height = scanner.nextDouble();
        System.out.println("输入反弹次数:");
        int n = scanner.nextInt();
        double s = height;

        for (int i=1;i 
输出结果 
共经过299.609375米。
反弹0.09765625米高。
  • Day10 打卡成功!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270967.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号