题解 | #求小球落地5次后所经历的路程和第5次反弹的高度#
求小球落地5次后所经历的路程和第5次反弹的高度
https://www.nowcoder.com/practice/2f6f9339d151410583459847ecc98446
import java.math.BigDecimal;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int initHeght = in.nextInt(); // 初始高度
System.out.println(String.valueOf(totalHeght(new BigDecimal(initHeght), 1,
BigDecimal.ZERO)));
System.out.println(String.valueOf(fourHeght(new BigDecimal(initHeght), 1)));
}
}
private static BigDecimal totalHeght(BigDecimal initHeight, int num,
BigDecimal totalHeight) {
if (BigDecimal.ZERO == initHeight || num > 5 || num == 0) {
return totalHeight;
}
if (num > 0 && num <= 5 ) {
BigDecimal ftHeght = initHeight.divide(new BigDecimal(2), 6,
BigDecimal.ROUND_HALF_UP); // 反弹的高度
if (num == 1) {
totalHeight = totalHeight.add(initHeight);
} else {
totalHeight = totalHeight.add(initHeight.multiply(new BigDecimal( 2))); // 经过的总长度
}
num += 1; // 次数从1开始,到5结束;
return totalHeght(ftHeght, num, totalHeight);
}
return totalHeight;
}
private static BigDecimal fourHeght(BigDecimal initHeight, int num) {
BigDecimal g = initHeight.divide(new BigDecimal(2), 6,
BigDecimal.ROUND_HALF_UP); // 反弹的高度;;
if ( num == 5 ) {
return g ; // 反弹的高度;;
} else {
return fourHeght(g, num + 1);
}
}
}


