C++ 球从M米高度自由下落,每次落地后返回原高度的一半,再落下。它在第N次落地时反弹多高?共经过多少米?

本片博客用于记录此题的思路和解法

解题思路:

1. 使用double定义变量,且都要赋值为起始高度便于计算

2. 对于反弹的高度的计算,使用循环除2即可

3.对于总路程,由于已经将总路程赋值为起始高度,则只需要累加每次反弹的高度乘2(反弹上去与掉下来)

tips:要注意题目问是第N次落地时经过多少米,所以总路程算的是第N次之前的总路程,这里使用if做限定

完整代码:

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

int main()
{
    double M, N;
    cin >> M >> N;

    double current_height = M;
    double total_distance = M;

    for (int i = 1; i <= N; i++)
    {
        current_height /= 2; // 落地一次反弹的高度
        if (i != N)
        {                                         // 不算第N次落地后的上去和下来
            total_distance += current_height * 2; // 落地一次后反弹与落下的路程
        }
    }

    cout << fixed << setprecision(2) << current_height << " " << total_distance << endl;

    return 0;
}

记忆:

1.double或float都可以定义浮点数,不过double精度更高

2.输出n位小数语句

 cout << fixed << setprecision(n) << xxx <<endl;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值