五十道编程小题目 --- 10 反弹的小球 java

【程序10】 
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多

少米?第10次反弹多高? 


<pre name="code" class="java">
public class BallFlip {
	
	public static void ballFlip(double m, double n){
		
		StringBuilder sb = new StringBuilder();
		
		double height = m;                     //从m米开始落下来
		double sum = m + m/2;                  //第一次落下到弹上来 ,所走的米数 = 本身的高度 + 本身的高度 / 2 
		
		System.out.println("第0次所在高度:" + height + " ");
		sb.append(m +" + " + m/2 + " + ");
		
		for(int i=0; i<n; i++){
			
			height = m/2;                   //第i次,落下后反弹的高度
			m = height;

			System.out.println("第"+ (i+1) +"次所在高度:"+height + " ");
			
			if(i+1 >= n){
				sum += height;   //最后一次没有 : 本身的高度 / 2 
				continue;
			}
			
			sum += height + height/2;        //第i次落下到弹上来 ,所走的米数 = 本身的高度 + 本身的高度 / 2 
			sb.append(height +" + " + height/2 + " + ");
			if(i%5 == 0){
				sb.append("\n");
			}
		}
		
		sb.insert(0, sum + "=");
		String s = sb.substring(0, sb.length()-2);
		
		System.out.println();
		
		System.out.println(s);
		
	}

	public static void main(String[] args) {
		
		ballFlip(100, 10);
		
	}
	
}


 输出结果:

第0次所在高度:100.0 
第1次所在高度:50.0 
第2次所在高度:25.0 
第3次所在高度:12.5 
第4次所在高度:6.25 
第5次所在高度:3.125 
第6次所在高度:1.5625 
第7次所在高度:0.78125 
第8次所在高度:0.390625 
第9次所在高度:0.1953125 
第10次所在高度:0.09765625 


299.8046875=100.0 + 50.0 + 50.0 + 25.0 + 
25.0 + 12.5 + 12.5 + 6.25 + 6.25 + 3.125 + 3.125 + 1.5625 + 1.5625 + 0.78125 + 
0.78125 + 0.390625 + 0.390625 + 0.1953125 + 0.1953125 + 0.09765625 





你可能感兴趣的:(五十道编程小题目 --- 10 反弹的小球 java)