题解 | #小球的距离#

小球的距离

http://www.nowcoder.com/practice/e637331ec6254a74a863ccb9040444c4

class Balls {
public: 
    int calcDistance(int A, int B, int C, int D) {
        // write code here
        return 3*(A+B+C+D);
    }
};

/**
*   假设初始高度为 X,则第一次落地经历距离为X; 反跳回高度为 X/2, 因此第二次落地经历距离为 X/2, 
*   第三次为 X/2 的 1/2, 既X/4,每下一次都是上一次的1/2,一般会由此想到等比数列,公比q=1/2
*   假设需要n次该小球不再弹起, 第一次 A1=X*q^1-1=X, A2=A1*q^(2-1)=A1*q=A1*1/2, A3=A1*q^(3-1) 
*   则最后一次经历的距离为 An=A1*q^(n-1)
*   题目要求可认为该等比数列在n趋于正无穷大时的和:
*   Sn=A1+A2+A3+...+An
*   (1) Sn=A1+A1*q^1+A1*q^2+...+A1*q^(n-1)
*       给(1)式等号左右俩边同时乘 公比q 得(2)式:
*   (2) qSn=A1*q+A1*q^1+A1*q^2+...+A1*q^n
*
*   使用(1)式 减 (2)式 的(3)式:
*   Sn-q*Sn=A1-A1*q^n 化简
*   (1-q)Sn=A1(1-q^n)
*   Sn=A1(1-q^n) / (1-q)
*   当n趋于正无穷大时 limt(n->)q^n ~= 0(q<1)
*   因此上式 Sn=A1 / (1-q)
*   当A1=X,q=1/2时: Sn=2*X
*   总距离 = X + X*2 = 3*X
*/
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务