题目描述

一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。
它在第N次落地时反弹多高?共经过多少米? 保留两位小数

输入

M N

输出

它在第N次落地时反弹多高?共经过多少米? 保留两位小数,空格隔开,放在一行

样例输入

1000 5

样例输出

31.25 2875.00

来源/分类

C语言 

题目截图:

ACMNO.14一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数  输入  M N  输出  它在第N次落地时反弹多高?共经过多少米_C语言-弹球


思路:

首先想到用for循环语句来解决!
下落一次比较长,要加上!
s+=a;
然后长度缩减一半!
a=a/2;
再加上缩减之后的一半!
s+=a;

但是整个程序计算的是它从被抛出点,到落地的距离!
我们要计算的是,他悬空终止的总距离!

再减去最后一次反弹起来的距离!
s-=a;

代码:

#include<iostream>
using namespace std;
int main()
{
double a,b,s;
s=0;
cin>>a>>b;
//printf("a %.2f\n",a);
//printf("b %.2f\n",b);
//printf("s %.2f\n\n\n",s);
for(int i=0;i<b;i++)
{
s+=a;
a=a/2;
s+=a;
//printf("a %.2f\n",a);
//printf("s %.2f\n",s);
}
s-=a;
printf("%.2f %.2f",a,s);
}

代码截图:

ACMNO.14一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数  输入  M N  输出  它在第N次落地时反弹多高?共经过多少米_保留两位小数_02


代码执行截图:

ACMNO.14一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数  输入  M N  输出  它在第N次落地时反弹多高?共经过多少米_for循环_03


OJ结果:

ACMNO.14一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数  输入  M N  输出  它在第N次落地时反弹多高?共经过多少米_C语言-弹球_04