【题解】【AcWing】3570. 弹地小球

223 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

3570. 弹地小球

原题传送:AcWing 3570. 弹地小球

一个小球,从高为 HH 的地方下落,下落弹地之后弹起高度为下落时的一半,比如第一次弹起高度为 H/2H/2 ,如此往复,计算从小球 HH 高度下落到第 nn 次弹地,往返的总路程。

输入格式

第一行包含整数 TT ,表示共有 TT 组测试数据。

每组数据占一行,包含两个整数 HHnn

输出格式

每组数据输出一行,一个结果,表示小球往返的总路程,保留两位小数。

数据范围

1T101 \le T \le 10 , 1H1001 \le H \le 100 , 1n51 \le n \le 5

输入样例:

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;
}