题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
程序分析
题目描述了一球从一定高度自由落下并反弹,要求计算第10次落地时共经过的距离以及第10次反弹的高度。每次反弹后,高度为前一次的一半。
解题思路
-
迭代法:模拟球的每次落地和反弹,累计经过的距离和计算反弹高度。
-
数学公式法:利用数学公式计算第10次落地的总距离和第10次反弹的高度。
-
递归法:通过递归模拟球的每次落地和反弹,累计经过的距离和计算反弹高度。
1. 迭代法
程序实现
#include <stdio.h>
void calculateDistanceAndHeight(int numBounces, double height, double *totalDistance, double *finalHeight) {
double distance = height; // Distance initialized with the initial height
double bounceHeight = height; // Initialize bounce height
for (int i = 1; i <= numBounces; i++) {
// Add the distance travelled during the fall and rise
distance += bounceHeight * 2;
// Update the bounce height for the next bounce
bounceHeight /= 2;
// Update final bounce height for the 10th bounce
if (i == numBounces)
*finalHeight = bounceHeight;