题意整理。
- 一个小球从h高度落下,每次反弹高度是原高度的一半。
- 求第n次落地时,经过了多少米,第n次反弹多高。
方法一(循环)
1.解题思路
- 利用循环计算每次反弹时的高度(记为h),以及经过了多少米(记为dist)。
- 由于要输出的是第n次落地时走了多少米,所以dist要减去最后反弹的高度h。
动图展示:
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次,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。

 京公网安备 11010502036488号
京公网安备 11010502036488号