本文已参与「新人创作礼」活动,一起开启掘金创作之路。
3570. 弹地小球
原题传送:AcWing 3570. 弹地小球
一个小球,从高为 的地方下落,下落弹地之后弹起高度为下落时的一半,比如第一次弹起高度为 ,如此往复,计算从小球 高度下落到第 次弹地,往返的总路程。
输入格式
第一行包含整数 ,表示共有 组测试数据。
每组数据占一行,包含两个整数 和 。
输出格式
每组数据输出一行,一个结果,表示小球往返的总路程,保留两位小数。
数据范围
, ,
输入样例:
1
5 2
输出样例:
10.00
思路:
模拟小球的弹地,除第一次下落的距离是一次高度,其他都是一个来回,即两次的高度。
题解:
#include <bits/stdc++.h>
using namespace std;
double f(double h, int n)
{
double sum = (double)h;
n--;
while(n)
{
h /= 2;
sum += h * 2;
n--;
}
return sum;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
double h;
int n;
scanf("%lf%d", &h, &n);
double res = f(h, n);
printf("%.2lf\n", res);
}
return 0;
}