本片博客用于记录此题的思路和解法
解题思路:
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;