题目描述
假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高?
最后的误差判断是小数点6位
输入描述:
输入起始高度,int型
输出描述:
分别输出第5次落地时,共经过多少米第5次反弹多高
注意点:本体需要精准的计算数据 所以我用到了 BigDecimal,其中注意的一点是 BigDecimal中的b = b.divide(new BigDecimal("2"),6,BigDecimal.ROUND_HALF_UP);,意思是取小数点后六位有效数字,
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.BigDecimal;
public class Main {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s ;
while((s = br.readLine()) !=null) {
BigDecimal b = new BigDecimal(s);
BigDecimal b1 = new BigDecimal("0");
b1 = b1.add(b);
int sum = 0;
while(sum<4) {
sum++;
b1 = b1.add(b);
b = b.divide(new BigDecimal("2"),6,BigDecimal.ROUND_HALF_UP);
}
System.out.println(b1);
System.out.println( b.divide(new BigDecimal("2"),6,BigDecimal.ROUND_HALF_UP));
}
}
}
思路2 本题目给我们的答案是从1米出弹跳5次后的经历路程(设为a),所以如果我们想求弹跳n次后的路程那只需要计算n*a
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
while ((s = br.readLine()) != null) {
System.out.println(new BigDecimal("2.875").multiply(new BigDecimal(s)));
System.out.println(new BigDecimal("0.03125").multiply(new BigDecimal(s)));
}
}
}