本帖最后由 程潇 于 2012-7-21 08:17 编辑
/*
* 题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
*
* 思路:
* 假设高度为height,反弹高度为fantan,下落次数num,共经过的路程为distance
*
* 分析每一次下落过程各变量的变换情况:
* 每次下落时一共经过的路程,应该是已经经过的路程,上一次下落后反弹的高度和本次下落的高度之和,即distance=distance+fantan+height
* 下落后反弹高度为原高度的一半fantan=height/2,同时也是下次下落的高度height=fantan,下落后次数增加1次,
*
* 每次下落,重复以上过程,直到次数增加到num,再执行一次下落,即可结束
* 因此可以通过循环实现整个下落反弹的过程,下落次数作为循环终止条件,上述下落过程作为循环体,实现代码如下。
*
* */
package test;
public class Ball {
public static void fall(double height, int num) {
double fantan = 0.0d;
double distance = 0.0d;
for (int i = 0; i < num; i++) {
distance = distance + fantan + height;
fantan = height / 2;
height = fantan;
}
System.out.println("第 " + num + " 次落地时,共经过 " + distance + " 米," + "第 "
+ num + " 次反弹高度 " + fantan + " 米");
}
public static void main(String[] args) {
// 这里为了查看整个下落过程,通过循环,把每次下落后经过的路程和反弹的高度都打印出来
// 如果要直接得到最终结果,可将以下语句直接写为fall(100,10);
for (int i = 1; i <= 10; i++)
fall(100, i);
}
}
运行结果:
第 1 次落地时,共经过 100.0 米,第 1 次反弹高度 50.0 米
第 2 次落地时,共经过 200.0 米,第 2 次反弹高度 25.0 米
第 3 次落地时,共经过 250.0 米,第 3 次反弹高度 12.5 米
第 4 次落地时,共经过 275.0 米,第 4 次反弹高度 6.25 米
第 5 次落地时,共经过 287.5 米,第 5 次反弹高度 3.125 米
第 6 次落地时,共经过 293.75 米,第 6 次反弹高度 1.5625 米
第 7 次落地时,共经过 296.875 米,第 7 次反弹高度 0.78125 米
第 8 次落地时,共经过 298.4375 米,第 8 次反弹高度 0.390625 米
第 9 次落地时,共经过 299.21875 米,第 9 次反弹高度 0.1953125 米
第 10 次落地时,共经过 299.609375 米,第 10 次反弹高度 0.09765625 米
|