题目描述:
假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第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; }