题解 | #计算小球走过的路程和反弹高度#

计算小球走过的路程和反弹高度

http://www.nowcoder.com/practice/ac674f68367149d5ad1f857a379e69c9

题意整理。

  • 一个小球从h高度落下,每次反弹高度是原高度的一半。
  • 求第n次落地时,经过了多少米,第n次反弹多高。

方法一(循环)

1.解题思路

  • 利用循环计算每次反弹时的高度(记为h),以及经过了多少米(记为dist)。
  • 由于要输出的是第n次落地时走了多少米,所以dist要减去最后反弹的高度h。

动图展示: alt

2.代码实现

#include <iostream>
#include <iomanip>
using namespace std;

int main() {

    // 下落的高度和落地的次数
    double h;
    int n;

    cin >> h;
    cin >> n;

    //记录第n次反弹时总共走过的记录
    double dist=0;
    for(int i=1;i<=n;i++){
        h/=2;
        //向下过程中走2*h,反弹h高度,总共3*h
        dist+=h*3;
    }
    //由于要输出的是第n次落地时走了多少米,所以dist要减去最后反弹的高度h
    cout<<fixed<<setprecision(1)<<dist-h<<" "<<h<<endl;

    return 0;
}

3.复杂度分析

  • 时间复杂度:循环总共执行n次,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)
xqxls的题解 文章被收录于专栏

牛客题解

全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
oppo 应用软开 22*15+0.5*12
拿到了ssp完美:真的坎坷,但是你至少拿到这么多offer了!
点赞 评论 收藏
分享
评论
11
3
分享
牛客网
牛客企业服务