一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。它在第N次落地时反弹多高?共经过多少米? 保留两位小数
用一个表格来找规律
假设初始高度m为100
s=m;M=m.
第一次 | 第二次 | 第三次 | 第n次 | |
落地反弹高度h |
50 | 25 | 12.5 | h(n-1)/2 |
路程s |
100+50 |
100+50+50+25 =100+100+25 |
100+50+50+25+25+12.5 =100+100+50+12.5 |
循环(第n次就执行n次,n!=1) s+= M; |
#include#includeusing namespace std;int main(){ float m, n, s, h, M, N; cin >> m >> n; M = m; N = n; h = 0; s = m; while (n) //求高度 { h = m / 2; m = m / 2; n--; } for (int i = 1; i < N; i++) //求路程,该循环反弹次数N不能取1 { s += M; M = M / 2; } cout << fixed << setprecision(2) << h << '\t'<< fixed << setprecision(2) <<s<<endl; return 0;}