题目描述

小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数)

给定四个整数A,B,C,D,请返回所求结果。

测试样例:
100,90,80,70
返回:1020
解题

感觉很简单,但是在double to int 上出现了问题,参看讨论有下面答案
import java.util.*;

public class Balls {
    public int calcDistance(int A, int B, int C, int D) {
        // write code here
        double result = 0.0;
        result = getDistance(A) + getDistance(B) + getDistance(C) + getDistance(D);
        return (int)result;
    }
    public double getDistance(double n){
        if(n==0)
            return 0;
        return n+n/2+getDistance(n/2);
    }
}

就是下面这样写不对头

 public double getDistance(double n){
        if(n==0)
            return 0;
        // return n+n/2+getDistance(n/2);
        double result = 0.0;
        
        while(n!=0){
            result +=n + n/2;
            n/=2;
        }
        return result;
    }

这里我感觉应该是double的问题,后面的精度省略了,而通过递归都是相加的

 

在讨论中,更神奇的就是直接求出答案,手敲了下面计算过程:

答案直接就是3*(A+B+C+D)