链接:https://www.nowcoder.com/questionTerminal/2f6f9339d151410583459847ecc98446?answerType=1&f=discussion
来源:牛客网
假设一个球从任意高度自由落下,每次落地后反跳回原高度的一半; 再落下, 求它在第5次落地时,共经历多少米?第5次反弹多高?
最后的误差判断是小数点3位
输入描述:
输入起始高度,int型
输出描述:
分别输出第5次落地时,共经过多少米第5次反弹多高
示例1
输入
1
输出
2.875
0.03125
解题思路:
每次掉落弹起高度为原来的一半,所有第N次弹起高度为h=H/2^N;
计算经过路程:第1次掉落,比较特殊,路程只有高度一倍。从第2次落地开始开始有规律了,路程为反弹高度的两倍;
1---->1;
2---->0.52
3---->0.252
4---->0.1252
5---->0.06252
所有推导出公式:H/(2^(n-1))*2=2H/(2^(n-1))
然后循环把路程加起来就可以了
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner scan=new Scanner(System.in); while(scan.hasNext()){ int n=scan.nextInt(); float sum=n; for(int i=2;i<=5;i++){ sum=(float) (sum+(2*n/Math.pow(2, i-1))); } System.out.println(sum); System.out.println(n/Math.pow(2, 5)); } } }