题目描述
小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面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)