1613 - 弹地小球

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

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

题目输入

输入第一行为样例数m,接下来m行每行两个整数H和n,n不超过5。

题目输出

输出m行,表示所求总路程,结果保留小数点后两位。

输入/输出样例

输入格式

1
5 2

输出格式

10.00

C语言解答

#include<stdio.h>
int main()
{
int  a,i,j;
	double d=0.0,b,c;
	scanf("%d",&a);
	for(i=0;i<a;i++)
	{
		scanf("%lf%lf",&b,&c);
			d=b;
		for(j=2;j<=c;j++)
		{
			b=b/2.0;
		d=b*2.0+d;
		
		}
		printf("%.2f\n",d);
		
	}
	return 0;
}

		

C++解答

#include <cstdio>
#include <cmath>

double fun(int n) {
    if (1 == n)
        return 1;
    else
        return fun(n - 1) + 1.0 / pow(2.0, n - 2);
}

int main() {
    //freopen("test.in", "r", stdin);
    //freopen("test.out", "w", stdout);
    int t;
    scanf("%d", &t);
    while (t--) {
        int h, n;
        scanf("%d %d", &h, &n);
        printf("%.2f\n", fun(n) * h);
    }
    return 0;
}