#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 次落地 ==== 反弹的高度