java自由落体
一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数
样例输入1000 5
样例输出31.25 2875.00
import java.util.Scanner;
public class aaa {
public static void main(String[] args) {
Scanner rd=new Scanner(System.in);
double m;
int n;
m=rd.nextInt();
n=rd.nextInt();
double h=1000; for(int i=0;i<n;i++){
m=m/2;
h=h+2*m;
}
System.out.printf("%.2f",m);
System.out.printf(" "+"%.2f",h);
}}
我输出的结果1000 5
31.25 2937.50怎么改?
[解决办法]
哦,看错条件是“落地时”不是“弹起后”,那么不只是循环有误,完整修改如下:
m=rd.nextInt();
n=rd.nextInt();
double h = 0; // 从0开始
for (int i = 0; i < n - 1; i++) { // 最后一次没弹起所以不能用循环来算,要提前一次结束掉
h += m;
m /= 2;
h += m;
}
h += m; // 算最后一次落地
System.out.printf("%.2f",m);
System.out.printf(" "+"%.2f",h);