华为机试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次反弹的高度的主要内容,如果未能解决你的问题,请参考以下文章