#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double h=0.0;
int n=0;
cin>>h>>n;
double hs=h;
while(n>1)
{
h=0.5*h;
hs+=2*h;
n--;
}
h=0.5*h;
cout<<fixed<<setprecision(1)<<hs<<" "<<h<<endl;
return 0;
}
这道题目刚开始写了好几次都没通过测试,主要在于题目的意思没有看懂,题目要求的是第 n 次落地时经过的距离和第 n 次反弹的高度,也就是**==第 n 次落地前经过的高度,和第 n 次落地后反弹的高度==**,有一点点抠字眼
所以我们在利用次数来计算的时候,第1次下落是没有反弹的,不需要计算反弹的高度然后和下落前的高度加起来,因而我们
while循环的控制条件应当是对第一次不做反弹计算,i>1,我刚开始写的是while(i),这样就把第一次算成了会反弹的情况那么如果这样子的话,我们在计算第 n 次反弹的高度的时候,就需要把高度 h 拿出来再算一下,因为是第 n 次落地 ==后== 反弹的高度

京公网安备 11010502036488号