球從 100m 高度落下,每次落地反彈至原高度一半。求第 10 次落地時總路程、第 10 次反彈高度。
h_{i-1} + 下落 h_{i-1} = 2*h_{i-1};h_i = h_{i-1} / 2,h_0 = 100。#include <stdio.h>
float totalDistance(float h, int n) {
float s = 0;
for (int i = 1; i <= n; ++i) {
s += h; // 下落
h /= 2; // 反彈高度
if (i != n) s += h; // 非最後一次落地,加上升
}
return s;
}
float reboundHeight(float h, int n) {
for (int i = 0; i < n; ++i) h /= 2;
return h;
}
int main() {
int n;
printf("請輸入落地次數: ");
scanf("%d", &n);
float h = 100.0f;
printf("第 %d 次反彈高度: %.6f m\n", n, reboundHeight(h, n));
printf("第 %d 次落地總路程: %.6f m\n", n, totalDistance(h, n));
return 0;
}
第 10 次反彈高度: 0.097656 m
第 10 次落地總路程: 299.804688 m
S_n = 100 + 2*100*(1 - (1/2)^{n-1}) (n≥2);h_n = 100 * (1/2)^n。