JD5. 小球的距离
描述
小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推直到全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数)
给定四个整数A,B,C,D,请返回所求结果。
100,90,80,70
返回:1020
C++ 解法, 执行用时: 2ms, 内存消耗: 360KB, 提交时间: 2020-11-01
class Balls { public: double cal(double A){ double dist_sum = A; double dist_bounced = A; while(dist_bounced >= 0.00001){ dist_bounced = dist_bounced / 2.0; dist_sum = dist_sum + 2.0 * dist_bounced; } return dist_sum; } int calcDistance(int A, int B, int C, int D) { // write code here return ceil(cal(A) + cal(B) + cal(C) + cal(D)); } };
C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-08-16
class Balls { public: int calcDistance(int A, int B, int C, int D) { return 3*(A+B+C+D); } };
C++ 解法, 执行用时: 2ms, 内存消耗: 408KB, 提交时间: 2021-08-02
class Balls { public: int calcDistance(int A, int B, int C, int D) { // write code here return ceil(calculate(A)+calculate(B)+calculate(C)+calculate(D)); } double calculate(double num){ double ans=num; while(num>0){ ans+=num; num/=2; } return ans; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 412KB, 提交时间: 2021-08-18
class Balls { public: int calcDistance(int A, int B, int C, int D) { double sum = A + B + C + D; double res = sum; while(sum > 0){ res += sum; sum /= 2.0; } return ceil(res); } };
C++ 解法, 执行用时: 2ms, 内存消耗: 420KB, 提交时间: 2021-10-09
class Balls { public: int calcDistance(int A, int B, int C, int D) { // write code here return cal(A)+cal(B)+cal(C)+cal(D); } int cal(int x) { return fsum(x) * 2 - x; } int fsum(int x) { return 2 * x; } // 神tm数组都为整数,只是结果为整数,中间的高度并不是整数的啊…… // int fsum(int x) { // int res = 0; // while (x) { // res += x; // x >>= 1; // } // return res; // } };