JAVA解题——求百米自由落下的10次反弹高度与所有路程距离(附源代码)
题目:
请设计程序计算一个球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?
解题思路:
1.规律分析
初始高度:100米
每次反弹高度:前一次的一半
第n次落地经过的总路程 = 下落路程 + 反弹路程
根据这个思路写出程序:
public class BallBounce {public static void main(String[] args) {double height = 100; // 初始高度(米)double totalDistance = 0; // 总路程int n = 10; // 第10次落地System.out.println("小球弹跳过程:");System.out.println("初始高度:" + height + "米");System.out.println("--------------------------------");for (int i = 1; i <= n; i++) {if (i == 1) {// 第一次只有下落totalDistance += height;} else {// 第2次开始:下落 + 上一次的反弹totalDistance += height * 2; // 下落 + 反弹}// 计算下一次反弹高度height /= 2;System.out.printf("第%d次落地:总路程 = %.2f米,下次反弹高度 = %.2f米%n", i, totalDistance, height);}System.out.println("--------------------------------");System.out.printf("第10次落地时,共经过:%.2f米%n", totalDistance);System.out.printf("第10次反弹高度:%.2f米%n", height);}
}
那么在这个的基础上继续优化
代码截图:
运行结果:
源代码:
double beginHeight = 100;int num = 10;double endHeight = beginHeight/Math.pow(2,num);double s = beginHeight + 2 * beginHeight * (1-1/Math.pow(2,num-1));System.out.printf("小球第10次落地时,经过了%.4f米,第10次反弹了%.4f米",s,endHeight);
如果想求其他的次数,高度,修改参数即可
我写的是保留四位小数,题中有小数点要求可需求自行修改代码