华为机试HJ38:求小球落地5次后所经历的路程和第5次反弹的高度

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试HJ38:求小球落地5次后所经历的路程和第5次反弹的高度相关的知识,希望对你有一定的参考价值。

题目描述:

假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高?

最后的误差判断是小数点6位

输入描述:

输入起始高度,int型

输出描述:

分别输出第5次落地时,共经过多少米第5次反弹多高

示例:

输入:

1

输出:

2.875

0.03125

解题思路:

第一次落地经历的是输入的高度,从第二次开始,相当于进行了前一次的高度,因为反弹高度是0.5倍,但是往返,这样可以得到五次落地总共经历的距离sum;循环从i=1开始,每次循环后temp/2得到的值相当于第i次反弹的高度,比如第一次反弹的高度是0.5m,以此类推;i最大到4,也就是说循环结束后的temp是第4次反弹高度,题目要求第5次反弹高度,所以再除以2即可。

测试代码:

#include <iostream>

using namespace std;

int main()
{
    int heigh;
    while(cin>>heigh)
    {
        double sum=0;
        double temp=static_cast<double>(heigh);
        // 第1次落地
        sum+=temp;
        // 第2-5次落地均是往返
        for(int i=1;i<5;++i)
        {
            sum+=temp;
            // temp/2为第i次的反弹高度,i最多到4
            temp/=2;
        }
        cout<<sum<<endl;
        // 第5次落地后进行第5次反弹,所以temp还要除以2
        cout<<temp/2<<endl;
    }
    return 0;
}

以上是关于华为机试HJ38:求小球落地5次后所经历的路程和第5次反弹的高度的主要内容,如果未能解决你的问题,请参考以下文章

华为机试HJ54:表达式求值

华为机试HJ108:求最小公倍数

华为机试HJ108:求最小公倍数

华为机试HJ86:求最大连续bit数

华为机试HJ86:求最大连续bit数

华为机试HJ100:等差数列